上下文處理器
上下文處理器是可以返回一些數(shù)據(jù)浙炼,在全局模板中都可以使用。比如登錄后的用戶信息存崖,在很多頁面中都需要使用汽煮,那么我們可以放在上下文處理器中搏熄,就沒有必要在每個視圖函數(shù)中都返回這個對象。
在settings.TEMPLATES.OPTIONS.context_processors
中逗物,有許多內(nèi)置的上下文處理器搬卒。這些上下文處理器的作用如下:
django.template.context_processors.debug
:增加一個debug
和sql_queries
變量。在模板中可以通過他來查看到一些數(shù)據(jù)庫查詢翎卓。django.template.context_processors.request
:增加一個request
變量契邀。這個request
變量也就是在視圖函數(shù)的第一個參數(shù)。django.contrib.auth.context_processors.auth
:Django
有內(nèi)置的用戶系統(tǒng)失暴,這個上下文處理器會增加一個user
對象坯门。django.contrib.messages.context_processors.messages
:增加一個messages
變量。-
django.template.context_processors.media
:在模板中可以讀取MEDIA_URL
逗扒。比如想要在模板中使用上傳的文件古戴,那么這時候就需要使用settings.py
中設(shè)置的MEDIA_URL
來拼接url
。示例代碼如下:<img src="" />
django.template.context_processors.static
:在模板中可以使用STATIC_URL
矩肩。django.template.context_processors.csrf
:在模板中可以使用csrf_token
變量來生成一個csrf token
现恼。
自定義上下文處理器:
有時候我們想要返回自己的數(shù)據(jù)。那么這時候我們可以自定義上下文處理器黍檩。自定義上下文處理器的步驟如下:
你可以根據(jù)這個上下文處理器是屬于哪個
app
叉袍,然后在這個app
中創(chuàng)建一個文件專門用來存儲上下文處理器。比如context_processors.py
刽酱≡洌或者是你也可以專門創(chuàng)建一個Python包
,用來存儲所有的上下文處理器棵里。-
在你定義的上下文處理器文件中润文,定義一個函數(shù),這個函數(shù)只有一個
request
參數(shù)殿怜。這個函數(shù)中處理完自己的邏輯后典蝌,把需要返回給模板的數(shù)據(jù),通過字典的形式返回头谜。如果不需要返回任何數(shù)據(jù)赠法,那么也必須返回一個空的字典。示例代碼如下:def frontuser(request): userid = request.session.get("userid") userModel = models.FrontendUser.objects.filter(pk=userid).first() if userModel: return {'frontuser':userModel} else: return {}