【问题标题】:How to read variables added to RequestContext inside class-based generic views?如何在基于类的通用视图中读取添加到 RequestContext 的变量?
【发布时间】:2011-07-08 12:12:10
【问题描述】:

使用常规视图,RequestContext 变量可以像request.VARNAME 一样被访问:

def example(request, template_name='stuff_list'):
  return render_to_response(template_name,
      {'stuff_list': get_list_or_404(Stuff, foo=request.DEBUG)},
      context_instance=RequestContext(request))

...而不是设置 context_instance 我可以调用 基于函数的通用视图 direct_to_template1

如何读取添加到class-based generic views2 内的 RequestContext 的变量?

例如:

class ArticleListView(ListView):
  template_name = 'stuff_list'
  bar = request.DEBUG   # This won't work. What should I use instead?
  queryset = get_list_or_404(Stuff, foo=bar)


1 无论如何都会被 class-based TemplateView 取代。
2 它们是 Django 1.3 中的新功能,我想使用它们只是因为。

【问题讨论】:

    标签: django django-views django-class-based-views


    【解决方案1】:

    您需要使用回调——在这种情况下为get_queryset()——而不是类属性。当您静态控制选项时,类属性实际上只是快捷方式,它们仅限于一些非常简单的事情。当你需要做一些更复杂的事情时,你会想要切换到回调。

    在您的情况下,如下代码应该可以工作:

    class ArticleListView(ListView):
        template_name = 'stuff_list'
    
        def get_queryset(self):
            return get_list_or_404(Stuff, foo=self.request.DEBUG)
    

    更多详情,see the documentation

    【讨论】:

    • 非常感谢,新的基于类的通用视图使我的应用程序更加简洁和小巧。 Django 团队做得很好!
    【解决方案2】:

    RequestContext 参数也是常规上下文变量。你应该可以做到{{VARNAME}}

    【讨论】:

      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 2019-03-12
      • 2012-02-14
      • 2015-11-08
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多