如何在我的 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.7
和 Python2.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">← Previous Posts</a>
</li>
<li class="next">
<a href="post.get_next_by_created_at">Next Posts →</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 %">← 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 →</a>
</li>
% endif %
</ul>
【讨论】:
对于 Django 1.11 % load url from future % 不再需要。以上是关于如何在我的 Django 博客中获取上一篇和下一篇文章?的主要内容,如果未能解决你的问题,请参考以下文章