Django - 为什么context.get('request')返回None值?

时间:2015-09-02 16:10:02

标签: django python-3.x

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>

4 个答案:

答案 0 :(得分:1)

上下文中缺少来自上下文处理器的请求和其他值。

该请求仍可作为RequestContext的属性使用。您可以使用context.request访问它。

答案 1 :(得分:0)

上下文处理器在呈现模板之前立即运行,即无法从运行该代码的位置访问。将上下文传递给模板并在某处打印{{request}},您将看到HttpRequest对象。

https://docs.djangoproject.com/en/1.8/ref/templates/api/#

对于它的价值 - 如果你正在尝试获取请求对象,那么它是传递给几乎所有视图的第一个参数。您可以访问它并在那里共享它。如果您严格尝试在模板中访问它,请尝试访问它,就像我上面提到的那样,看看是否可以访问它。

https://docs.djangoproject.com/en/1.8/topics/http/views/

答案 2 :(得分:0)

补充@Mothbawls回答,如果您需要pre_process请求或context_data,您可以使用request_processprocess_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