當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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