Django 1.8版
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
第二次印刷的反应实际上是无,但我无法弄清楚原因。似乎“请求”对象不存在,或根本不可用。
这是模块settings.py。
中感兴趣的部分<ul>
<li>
<a href="/something">This text is duplicated in Voiceover</a>
<span class="">Some description</span>
</li>
</ul>
答案 0 :(得分:1)
上下文中缺少来自上下文处理器的请求和其他值。
该请求仍可作为RequestContext
的属性使用。您可以使用context.request
访问它。
答案 1 :(得分:0)
上下文处理器在呈现模板之前立即运行,即无法从运行该代码的位置访问。将上下文传递给模板并在某处打印{{request}},您将看到HttpRequest对象。
https://docs.djangoproject.com/en/1.8/ref/templates/api/#
对于它的价值 - 如果你正在尝试获取请求对象,那么它是传递给几乎所有视图的第一个参数。您可以访问它并在那里共享它。如果您严格尝试在模板中访问它,请尝试访问它,就像我上面提到的那样,看看是否可以访问它。
答案 2 :(得分:0)
补充@Mothbawls回答,如果您需要pre_process请求或context_data,您可以使用request_process或process_template_response中间件。
答案 3 :(得分:0)
同样补充@Mothbawls答案,对于CBV,我使用以下Mixin将请求传递给模板上下文:
class RequestMixin(object):
""" Generic mixin to pass request data into context. """
def get_context_data(self, **kwargs):
context = super(RequestMixin, self).get_context_data(**kwargs)
context['request'] = self.request
return context