如何在我的 Django 博客中获取上一篇和下一篇文章?

Posted

技术标签:

【中文标题】如何在我的 Django 博客中获取上一篇和下一篇文章?【英文标题】:How to get the previous and next post in my Django blog? 【发布时间】:2015-06-26 10:07:40 【问题描述】:

我知道 Django 有 get_previous_by_FOO 和 get_next_by_FOO 方法,但我不知道如何在我的模板和视图中使用它们。所以,请帮助我使这两种方法适用于我的项目。

我正在运行 Django1.7Python2.7,我的应用名称是 blog 这是我对应的文件:

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

blog/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
                            )

blog/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>

【问题讨论】:

那么,会发生什么? href 字段是否为空? href 字段像这样localhost:8000/blog/current_post/next_or_previous_post 获得下一篇/上一篇文章的倾斜度 【参考方案1】:

最后我通过在模板中引入 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>

【讨论】:

对于 Django 1.11 % load url from future % 不再需要。

以上是关于如何在我的 Django 博客中获取上一篇和下一篇文章?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony,上一个和下一个链接

在 Blogger 中导航相同标签下的下一篇和上一篇文章

URL';s到类别中的下一篇和上一篇文章

如何在wordpress中获取下一个/上一个帖子的href和标题

wordpress 如何在子页面中导航上一页和下一页

如何获取SQL查询当前数据上一条和下一条的记录?