Django 上下文處理器 筆記

wuhaiwenpps發表於2020-09-24

上下文處理器是可以返回一些資料,在全域性模板中都可以使用,比如登陸後的使用者資訊,在很多頁面中都需要使用,那麼我們可以放在上下文處理器中,就沒有必要在每個檢視函式中都返回這個物件。
在settings.TEMPLATES.OPTIONS.context_processors中,有許多內建的上下文處理器,這些上下文處理器的作用如下:
1、django.template.context_processors.debug:增加一個debug和sql_queries變數,在模板中可以通過他來檢視一些資料庫查詢
2、django.template.context_processors.request:增加一個request變數,這個request變數也就是檢視函式的第一個引數
3、django.contrib.auth.context_processors.auth:Django有內建的使用者系統,這個上下文處理器會增加一個user物件
4、django.contrib.context_processors.messages:增加一個messages變數
5、django.template.context_processors.static:在模板中可以使用STATIC_URL
6、django.template.context_processors.csrf:在模板中可以使用csrf_token變數來生成一個csrf_token

自定義上下文處理器
有時候我們想要返回自己的資料,那麼這時候我們可以自定義上下文處理器,自定義上下文處理器的步驟如下:
1、你可以根據這個上下文處理器是屬於哪個app,然後在這個app中建立一個檔案專門用來儲存上下文處理器,比如context_processors.py。或者是你也可以專門建立一個Python包,用來儲存所有的上下文處理器
2、在你定義的上下文處理器檔案中,定義一個函式,這個函式只有一個request引數。這個函式中處理完自己的邏輯後,把需要返回給模板的資料,通過字典的形式返回。如果不需要返回任何資料,那麼也必須返回一個空的字典

def frontuser(request):
	userid = equest.session.get("userid")
	userModel = models.FrontendUser.objects.filter(pk=userid).first()
	if userModel:
		return {"frontuser":userModel}
	else:
		return {}

相關文章