Django上下文處理器

上下文處理器

上下文處理器是可以返回一些數據,在全局模板中都可以使用。比如登錄後的用戶信息,在很多頁面中都需要使用,那麼我們可以放在上下文處理器中,就沒有必要在每個視圖函數中都返回這個對象。
在settings.TEMPLATES.OPTIONS.context_processors中,有許多內置的上下文處理器。這些上下文處理器的作用如下:
django.template.context_processors.debug:增加一個debug和sql_queries變量。在模板中可以通過他來查看到一些數據庫查詢。
django.template.context_processors.request:增加一個request變量。這個request變量也就是在視圖函數的第一個參數。
django.contrib.auth.context_processors.auth:Django有內置的用戶系統,這個上下文處理器會增加一個user對象。
django.contrib.messages.context_processors.messages:增加一個messages變量。
django.template.context_processors.media:在模板中可以讀取MEDIA_URL。比如想要在模板中使用上傳的文件,那麼這時候就需要使用settings.py中設置的MEDIA_URL來拼接url。示例代碼如下:
<img src="" />
django.template.context_processors.static:在模板中可以使用STATIC_URL。
django.template.context_processors.csrf:在模板中可以使用csrf_token變量來生成一個csrf token。

自定義上下文處理器:

有時候我們想要返回自己的數據。那麼這時候我們可以自定義上下文處理器。自定義上下文處理器的步驟如下:
你可以根據這個上下文處理器是屬於哪個app,然後在這個app中創建一個文件專門用來存儲上下文處理器。比如context_processors.py。或者是你也可以專門創建一個Python包,用來存儲所有的上下文處理器。
在你定義的上下文處理器文件中,定義一個函數,這個函數只有一個request參數。這個函數中處理完自己的邏輯後,把需要返回給模板的數據,通過字典的形式返回。如果不需要返回任何數據,那麼也必須返回一個空的字典。示例代碼如下:
def frontuser(request):
   userid = request.session.get("userid")
   userModel = models.FrontendUser.objects.filter(pk=userid).first()
   if userModel:
     return {'frontuser':userModel}
   else:
     return {}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章