本文介绍 django.template.RequestContext
的用法。
声明
class RequestContext(request, dict_=None, processors=None)
Django 带有一个特殊的 Context
类 django.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))
相关用法
- Python Django RequireDebugFalse用法及代码示例
- Python Django Response.json用法及代码示例
- Python Django Repeat用法及代码示例
- Python Django RelatedManager.set用法及代码示例
- Python Django RelatedManager.remove用法及代码示例
- Python Django Reverse用法及代码示例
- Python Django Redirect用法及代码示例
- Python Django RelatedManager.clear用法及代码示例
- Python Django RelatedManager.create用法及代码示例
- Python Django RelatedManager.add用法及代码示例
- Python Django Response.resolver_match用法及代码示例
- Python Django Response.context用法及代码示例
- Python Django RedirectView用法及代码示例
- Python Django Replace用法及代码示例
- Python Django RandomUUID用法及代码示例
- Python RLock acquire()用法及代码示例
- Python Random.Choices()用法及代码示例
- Python Django REQUIRED_FIELDS用法及代码示例
- Python Django Radians用法及代码示例
- Python Django RawSQL用法及代码示例
- Python Django RadioSelect用法及代码示例
- Python Django Right用法及代码示例
- Python Django RangeOperators用法及代码示例
- Python RLock release()用法及代码示例
- Python PIL RankFilter()用法及代码示例
注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.template.RequestContext。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。