контекст доступа django в шаблоне

Мой код такой: я настраиваю свой контекст и хочу получить доступ к моему набору запросов в шаблоне.

class GetStudentQueryHandler(ListView):
    template_name = 'client.html'
    paginate_by = STUDENT_PER_PAGE
    context_object_name = 'studentinfo'

    def get_context_data(self, **kwargs):
        context = super(GetStudentQueryHandler, self).get_context_data(**kwargs)
        context['can_show_distribute'] = self.request.user.has_perm('can_show_distribute_page')
        context['form'] = QueryStudentForm

        return context

    def get_queryset(self):

Возникает вопрос: как получить доступ к набору запросов, возвращаемому методом get_queryset в шаблонах? Я знаю, что могу получить доступ к пользовательским атрибутам, таким как studentinfo.can_show_distribute, как получить доступ к данным запроса?


person Roger Liu    schedule 09.05.2013    source источник


Ответы (1)


Как написано здесь контекстной переменной по умолчанию для ListView является objects_list

Таким образом, в шаблоне к нему можно получить доступ следующим образом:

{% for obj in objects_list%}
   {{obj.some_field}}
{% endfor %}

Также его можно задать вручную с помощью параметра context_object_name (как в вашем примере):

class GetStudentQueryHandler(ListView):
    # ...
    context_object_name = 'studentinfo'
    # ...

и в шаблоне:

{% for obj in studentinfo %}
   {{obj.some_field}}
{% endfor %}

Чтобы получить доступ к дополнительно добавленному полю can_show_distribute из контекста в шаблоне:

{{ can_show_distribute }}
person stalk    schedule 09.05.2013
comment
Я знаю это, но я настроил свой контекст в методе get_context_data, я добавляю такие поля, как «can_show_distribute», я боюсь, что если я использую цикл for, я также получу доступ к настраиваемым полям, но я просто хочу отображать данные возвращаемый методом get_queryset. - person Roger Liu; 09.05.2013
comment
Ну, вы сделали это: context = super(GetStudentQueryHandler, self).get_context_data(**kwargs). Таким образом, ваш контекст будет включать все поля, которые добавляет ListView. Чтобы получить доступ к can_show_distribute из шаблона, вы должны сделать это: {{can_show_distribute}}, а не это: {{studentinfo.can_show_distribute}} - person stalk; 09.05.2013
comment
так вы имеете в виду, что объект studentinfo просто представляет набор запросов, возвращаемый методом get_queryset? хорошо, я попробую, если получится, я приму ваш ответ, спасибо - person Roger Liu; 09.05.2013
comment
@stalk Вы имеете в виду, что для разных представлений переменная контекста по умолчанию может отличаться? - person hlkstuv_23900; 07.11.2014
comment
@tilaprimera по умолчанию, все экземпляры ListView имеют переменную с именем object_list. Но вы можете указать конкретное имя переменной текущего представления в свойстве класса представления context_object_name. - person stalk; 07.11.2014
comment
Поскольку доступ к can_show_distribute также оказался под вопросом, я предложил соответствующим образом расширить принятый ответ. - person tbrlpld; 19.03.2019