当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django RequestContext用法及代码示例


本文介绍 django.template.RequestContext 的用法。

声明

class RequestContext(request, dict_=None, processors=None)

Django 带有一个特殊的 Contextdjango.template.RequestContext ,它的行为与普通的 django.template.Context 略有不同。第一个区别是它将 HttpRequest 作为其第一个参数。例如:

c = RequestContext(request, {
    'foo': 'bar',
})

第二个区别是它会根据引擎的context_processors 配置选项自动使用一些变量填充上下文。

context_processors 选项是可调用对象的列表 - 称为上下文处理器 - 将请求对象作为参数并返回要合并到上下文中的项目字典。在默认生成的设置文件中,默认模板引擎包含以下上下文处理器:

[
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
]

除此之外, RequestContext 始终启用 'django.template.context_processors.csrf' 。这是管理员和其他 contrib 应用程序所需的与安全相关的上下文处理器,并且在意外配置错误的情况下,它会被故意硬编码,并且无法在 context_processors 选项中关闭。

每个处理器都按顺序应用。这意味着,如果一个处理器将变量添加到上下文中,而第二个处理器添加了一个同名变量,则第二个处理器将覆盖第一个。下面解释默认处理器。

应用上下文处理器时

上下文处理器应用在上下文数据之上。这意味着上下文处理器可能会覆盖您提供给 Context RequestContext 的变量,因此请注意避免与上下文处理器提供的变量名称重叠。

如果您希望上下文数据优先于上下文处理器,请使用以下模式:

from django.template import RequestContext

request_context = RequestContext(request)
request_context.push({"my_name": "Adrian"})

Django 这样做是为了允许上下文数据覆盖 API 中的上下文处理器,例如 render() TemplateResponse

此外,您可以使用可选的第三个位置参数 processors RequestContext 提供附加处理器列表。在此示例中, RequestContext 实例获取 ip_address 变量:

from django.http import HttpResponse
from django.template import RequestContext, Template

def ip_address_processor(request):
    return {'ip_address': request.META['REMOTE_ADDR']}

def client_ip_view(request):
    template = Template('{{ title }}: {{ ip_address }}')
    context = RequestContext(request, {
        'title': 'Your IP Address',
    }, [ip_address_processor])
    return HttpResponse(template.render(context))

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.template.RequestContext。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。