本文介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。