我想在当前文章下显示NEXT POST
和PREVIOUS POST
个标题,如下所示:
到目前为止,我一直将urls.py
中的DetailView对象传递为:
urls.py
url(r'^(?P<pk>\d+)$', DetailView.as_view(model = Post, template_name = 'blog/post.html')),
在post.html
中,我使用post对象来获取帖子的标题和正文。
<h2> {{post.title}} </h2>
<p> {{post.body|safe|linebreaks}} </p>
但后来我意识到我无法获得显示它的帖子列表。因此,我修改了urls.py
以重定向到包含
views.py
urls.py
url(r'^(?P<pk>\d+)$', views.post_details)
views.py
post_details (request,pk):
return render(request, 'blog/post.html',{'message' : [Post.objects.all(),DetailView.as_view(model = Post)]})
现在当我尝试在post.html
中使用字典时,我没有得到任何输出。
如何将DetailView和ListView作为参数传递给post.html
,如何提取它?
解决
Is there a clever way to get the previous/next item using the Django ORM?
答案 0 :(得分:2)
您不需要,下一个和上一个都是您可以传递的内容,作为额外的上下文,在所有通用视图上都有get_context_data
方法
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['next_post'] = my_next_post
context['prev_post'] = my_prev_post
return context
然后,您就可以在模板中使用next_post
和prev_post
。
有关至少一种检索下一个和上一个帖子的方法,请参阅Getting next and previous objects in Django。
答案 1 :(得分:-2)
我认为您必须为此撰写自己的观点。您正在搜索分页,django为此提供了良好的功能(https://docs.djangoproject.com/en/1.10/topics/pagination/)。