5

使用常规视图,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

如何在基于类的通用视图 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无论如何 都会被基于类的。TemplateView
2它们是 Django 1.3 中的新功能,我想使用它们只是因为。

4

2 回答 2

7

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

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

class ArticleListView(ListView):
    template_name = 'stuff_list'

    def get_queryset(self):
        return get_list_or_404(Stuff, foo=self.request.DEBUG)

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

于 2011-03-04T13:05:25.557 回答
6

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

于 2011-03-04T06:26:25.437 回答