如何在基于类的通用视图中读取添加到RequestContext的变量?

Ale*_*tov 5 django django-views django-class-based-views

使用常规视图,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))
Run Code Online (Sandbox Code Playgroud)

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

如何在基于类的通用视图 2中读取添加到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)
Run Code Online (Sandbox Code Playgroud)


1无论如何 都会被基于类的TemplateView替换.
2它们是Django 1.3中的新功能,我想使用它们只是因为.

jac*_*ian 7

您需要使用回调 - get_queryset()在这种情况下 - 而不是类属性.当你静态地控制选项时,类属性实际上只是快捷方式,并且它们仅限于一些非常简单的事情.当您需要执行更复杂的操作时,您将需要切换到回调.

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

class ArticleListView(ListView):
    template_name = 'stuff_list'

    def get_queryset(self):
        return get_list_or_404(Stuff, foo=self.request.DEBUG)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅文档.


Lak*_*sad 6

RequestContext参数也是常规上下文变量.你应该能够做到{{VARNAME}}

  • +1有人可能不知道这个,谢谢! (2认同)