我有2个不同的视图,从db获取过滤数据.我必须在一个模板文件(admin.html)中使用这些视图,但我不能同时在页面上使用多个视图.
这是我的观点1:
draft_list = Post.objects.filter(isdraft=True).order_by("-posted")
return render_to_response('userside/admin.html',
{'draft_list':draft_list,},
context_instance = RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
view2:
publish_list = Post.objects.filter(isdraft=False).order_by("-posted")
return render_to_response('userside/admin.html',
{'publish_list':publish_list,},
context_instance = RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
我喜欢使用它们:
{% for d in draft_list %}
{{ d.title }}
{% endfor %}
--
{% for p in publish_list %}
{{ p.title }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我想让这两个观点"一个观点".正确的方法是什么?
sch*_*cki 14
您不希望在1个模板中有2个视图(无论如何都不可能),但在1个模板中有2个模型可用于渲染.就这样做:
draft_list = Post.objects.filter(isdraft=True).order_by("-posted")
publish_list = Post.objects.filter(isdraft=False).order_by("-posted")
return render_to_response('userside/admin.html',
{'draft_list':draft_list,'publish_list':publish_list})
Run Code Online (Sandbox Code Playgroud)
从您的问题来看,您似乎正在使用基于函数的视图。解决您遇到的问题的另一种方法是使用基于类的视图并覆盖get_context_data方法来传递模板两个上下文,每个查询集一个。
#views.py
class MyClassBasedView(DetailView):
context_object_name = 'draft_list'
template='my-template'
queryset = Post.objects.filter(isdraft=True).order_by("-posted")
def get_context_data(self, **kwargs):
context = super(MyClassBasedView, self).get_context_data(**kwargs)
context['publish_list'] = Post.objects.filter(isdraft=False).order_by("-posted")
return context
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4836 次 |
| 最近记录: |