2015-04-19 2 views
2

Я знаю, что Django имеет методы get_previous_by_FOO и get_next_by_FOO, но я не знаю, как их использовать в моих шаблонах и представлениях. Поэтому, пожалуйста, помогите мне сделать эти два метода для моего проекта.Как получить предыдущий и следующий пост в моем блоге Django?

Я бегу Django1.7 и Python2.7 и мое имя приложения является blog Вот мои соответствующие файлы:

блог/views.py

def view_post(request, slug): 
    post = get_object_or_404(Post, slug=slug) 
    return render_to_response('blog/blog_post.html', 
      { 
       'post':post, 
      }, 
      context_instance=RequestContext(request)) 



class PublishedPostMixin(object): 
    def get_queryset(self): 
     return self.model.objects.live() 


class PostDetailView(PublishedPostMixin,DetailView): 
    model = Post 

блог/models.py

class Post(models.Model): 
    created_at = models.DateTimeField(auto_now_add=True, editable=False) 
    updated_at = models.DateTimeField(auto_now=True, editable=False) 
    title = models.CharField(max_length=255) 
    slug = models.SlugField(max_length=255,unique=True) 
    content = MarkdownField() 
    published = models.BooleanField(default=True) 
    author = models.ForeignKey(User, related_name="posts") 
    tags = models.ManyToManyField(Tag) 

    class Meta: 
     ordering = ["-created_at", "title"] 

    def __unicode__(self): 
     return self.title 

    def save(self, *args, ** kwargs): 
     if not self.slug: 
      self.slug = slugify(self.title) #title become the slug 
     super(Post, self).save(*args,**kwargs) 

    @models.permalink 
    def get_absolute_url(self): 
     return ("blog:detail",(),{'slug':self.slug 
          }) 

блог/urls.py

urlpatterns = patterns('', 
    url(r"^(?P<slug>[\w-]+)/$",view_post, name="detail"), 
) 

Шаблоны

<p> 
    {{ post.content|markdown }} 
</p> 
<ul class="pager"> 
    <li class="previous"> 
     <a href="{{post.get_previous_by_created_at}}">&larr; Previous Posts</a> 
    </li> 
    <li class="next"> 
     <a href="{{post.get_next_by_created_at}}">Next Posts &rarr;</a> 
    </li> 
</ul> 
+0

Итак, что происходит? поля href пусты? – karthikr

+0

Поле href, получающее tilte следующего/предыдущего сообщения, похоже на этот путь http: // localhost: 8000/blog/current_post/next_or_previous_post – Rohan

ответ

0

Наконец я решил ее просто вводя URL-адрес тега в шаблонах. Вот мой модифицированный шаблон.

{% load url from future %}  
<ul class="pager"> 
     {% if post.get_next_by_created_at %} 
      <li class="previous"> 
       <a href="{% url 'blog:detail' post.get_next_by_created_at.slug %}">&larr; Previous Post</a> 
      </li> 
     {% endif %} 
     {% if post.get_previous_by_created_at %} 
      <li class="next"> 
       <a href="{% url 'blog:detail' post.get_previous_by_created_at.slug %}">Next Post &rarr;</a> 
      </li> 
     {% endif %} 
    </ul> 
Смежные вопросы