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

时间:2011-03-04 01:43:19

标签: 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))

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

如何在class-based generic views 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)

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

2 个答案:

答案 0 :(得分:7)

在这种情况下,您需要使用回调 - 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

答案 1 :(得分:6)

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