如何在views.py/urls.py中将ListView和DetailView作为参数传递?

时间:2017-01-25 06:44:01

标签: python html django django-models django-views

我想在当前文章下显示NEXT POSTPREVIOUS POST个标题,如下所示:

enter image description here

到目前为止,我一直将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?

2 个答案:

答案 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_postprev_post

有关至少一种检索下一个和上一个帖子的方法,请参阅Getting next and previous objects in Django

答案 1 :(得分:-2)

我认为您必须为此撰写自己的观点。您正在搜索分页,django为此提供了良好的功能(https://docs.djangoproject.com/en/1.10/topics/pagination/)。