#django
#django
Вопрос:
Есть ли у Django RequestContext
способ получить HttpRequest
объект, с которым он связан? Есть ли у него метод, подобный get_request()
или подобный, для получения того request
, который передается в конструктор? Мне нужно ссылаться на него из метода, в котором я получаю только RequestContext
.
Комментарии:
1. Немного опоздал на вечеринку, и это связано с оговоркой о том, что я только сейчас вхожу в Django, но когда вы передаете аргумент dict
RequestContext
, вы потенциально можете добавить'request': request
, а затем извлечь его с помощью context.get(‘request’) . На самом деле это кажется неправильным, и для его передачи вам потребуется изменить свои представления, но если вам это действительно нужно, вы можете это сделать. Кроме того, если вы найдете другой (лучший) способ, пожалуйста, обновите. 🙂
Ответ №1:
Добавить 'django.core.context_processors.request'
в TEMPLATE_CONTEXT_PROCESSORS
настройки. И получить запрос, где контекст доступен с помощью :
request = context['request']
Комментарии:
1. Спасибо! (Мне нужно ввести 15 символов: p)
Ответ №2:
Нет, django.template.RequestContext
(который находится в django/template/context.py
) не хранит никаких ссылок на объект запроса:
class RequestContext(Context):
"""
This subclass of template.Context automatically populates itself using
the processors defined in TEMPLATE_CONTEXT_PROCESSORS.
Additional processors can be specified as a list of callables
using the "processors" keyword argument.
"""
def __init__(self, request, dict=None, processors=None, current_app=None, use_l10n=None):
Context.__init__(self, dict, current_app=current_app, use_l10n=use_l10n)
if processors is None:
processors = ()
else:
processors = tuple(processors)
for processor in get_standard_processors() processors:
self.update(processor(request))
Если Django был исправлен, чтобы включить в конструктор простую строку, подобную этой:
self.request = request
и определение функции, подобное этому:
def get_request(self):
return self.request
тогда мы были бы в деле. К сожалению, это не так, поэтому ответ: «Нет, вы не можете получить объект запроса, связанный с a RequestContext
» .
Комментарии:
1. Только для читателей, которые наткнулись на это в 2014 году, таких как я: ответ Хансона правильный, принятый ответ неверный. Просто добавьте django.core.context_processors.request в TEMPLATE_CONTEXT_PROCESSORS.
2. @Bunkerbewohner Я приму его ответ выше, так как мой устарел. Этот вопрос был первоначально задан в 2011 году, и с тех пор Django изменился.