在django中默認使用Context傳遞數(shù)據(jù)阶捆,一個Context是一系列變量和值的集合负懦,它和Python的字典有點相似
例:
def view_1(request):
# ...
t = loader.get_template('template1.html')
c = Context({
'app': 'My app',
'user': request.user,
'ip_address': request.META['REMOTE_ADDR'],
'message': 'I am view 1.'
})
return t.render(c)
def view_2(request):
# ...
t = loader.get_template('template2.html')
c = Context({
'app': 'My app',
'user': request.user,
'ip_address': request.META['REMOTE_ADDR'],
'message': 'I am the second view.'
})
return t.render(c)
view_1和view_2中每個視圖給模板傳了3個相同的變量:app、user褂痰、ip_address冲九,這增加了代碼的冗余器罐,此時使用RequestContext
方法一:
def custom_proc(request):
"A context processor that provides 'app', 'user' and 'ip_address'."
return {
'app': 'My app',
'user': request.user,
'ip_address': request.META['REMOTE_ADDR']
}
def view_1(request):
# ...
t = loader.get_template('template1.html')
c = RequestContext(request, {'message': 'I am view 1.'},
processors=[custom_proc])
return t.render(c)
def view_2(request):
# ...
t = loader.get_template('template2.html')
c = RequestContext(request, {'message': 'I am the second view.'},
processors=[custom_proc])
return t.render(c)
方法二:
setting.py中TEMPLATES_CONTEXT_PROCESSORS項,django1.8在TEMPLATES中
'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',
'myproject.context_processors',
],
},
vim context_processors.py
def name_proc(request):
user_id = request.user.id
......
info_dic = {
'session_user_id': user_id,
......
}
return info_dic
模板中即可直接調用:{{ session_user_id }}
RequestContext依次調用這些processors抵窒,往當前context中放入這里定義的默認變量弛针。可自定義一個processors然后添加到這里李皇。注意:使用RequestContext時削茁,應作為第三個參數(shù)傳入
-
django.core.context_processors.auth
如果 TEMPLATE_CONTEXT_PROCESSORS 包含了這個處理器宙枷,那么每個 RequestContext 將包含這些變量:
- user :一個 django.contrib.auth.models.User 實例,描述了當前登錄用戶(或者一個 AnonymousUser 實例茧跋,如果客戶端沒有登錄)慰丛。
- messages :一個當前登錄用戶的消息列表(字符串)。 在后臺瘾杭,對每一個請求诅病,這個變量都調用 request.user.get_and_delete_messages() 方法。 這個方法收集用戶的消息然后把它們從數(shù)據(jù)庫中刪除粥烁。
- perms : django.core.context_processors.PermWrapper 的一個實例贤笆,包含了當前登錄用戶有哪些權限。
-
django.core.context_processors.i18n
如果這個處理器啟用讨阻,每個 RequestContext 將包含下面的變量.
- LANGUAGES : LANGUAGES 選項的值
- LANGUAGE_CODE :如果 request.LANGUAGE_CODE 存在芥永,就等于它;否則钝吮,等同于 LANGUAGE_CODE 設置
-
django.core.context_processors.request
如果啟用這個處理器埋涧,每個 RequestContext 將包含變量 request , 也就是當前的 HttpRequest 對象奇瘦。 注意這個處理器默認是不啟用的飞袋,你需要激活它
如果你發(fā)現(xiàn)你的模板需要訪問當前的HttpRequest你就需要使用它:
{{ request.REMOTE_ADDR }}