【问题标题】:django - 2 views in one templatedjango - 一个模板中的 2 个视图
【发布时间】:2012-08-20 23:42:07
【问题描述】:

我有 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))

视图2:

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

我想像这样使用它们:

{% for d in draft_list %}
{{ d.title }}
{% endfor %}

--

{% for p in publish_list %}
{{ p.title }}
{% endfor %}

我想让这两个视图“一个视图”。正确的方法是什么?

【问题讨论】:

    标签: django-views


    【解决方案1】:

    您不想在 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})
    

    【讨论】:

    • 在获得 15 个代表之前,我无法投票任何答案。当我达到那个。我会投票赞成:)
    【解决方案2】:

    从您的问题来看,您似乎正在使用基于函数的视图。解决您遇到的问题的另一种方法是使用基于类的视图并覆盖 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2016-06-26
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      相关资源
      最近更新 更多