Как читать переменные, добавленные в RequestContext внутри общих представлений на основе классов? - PullRequest
5 голосов
/ 04 марта 2011

С обычными представлениями, переменные 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

Как читать переменные, добавленные в RequestContext внутри универсальные представления на основе классов 2 ?

Например:

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, и я хочу использовать их только потому, что.

Ответы [ 2 ]

7 голосов
/ 04 марта 2011

Вам нужно использовать обратный вызов - get_queryset() в этом случае - вместо атрибутов класса.Атрибуты класса - это просто ярлыки, когда вы управляете параметрами статически, и они ограничены некоторыми довольно простыми вещами.Когда вам нужно сделать что-то более сложное, вам нужно вместо этого переключиться на обратный вызов.

В вашем случае должен работать код, подобный следующему:

class ArticleListView(ListView):
    template_name = 'stuff_list'

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

Для получения более подробной информации, см. Документацию .

6 голосов
/ 04 марта 2011

Параметры RequestContext также являются обычными переменными контекста .Вы должны быть в состоянии сделать только {{VARNAME}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...