Django中全域性Context處理器

2022-07-04 13:39:12 字數 2275 閱讀 6379

1.模板標籤和模板變數

模板標籤在中定義:

thanks for logging in!

please log in.

模板變數在 中定義:

my first name is }. my last name is }.

2.context處理器和 requestcontext處理器

context 是乙個傳遞給模板的名稱到值的對映(類似python字典)。通過從context獲取值來替換模板中變數並執行所有的模板標籤來實現模板渲染。

from django.template import

loader, context

defview_1(request):

#...

t = loader.get_template('

template1.html')

c =context()

return

t.render(c)

defview_2(request):

#...

t = loader.get_template('

template2.html')

c =context()

return t.render(c)

在上述**中定義了兩個檢視,他們除了message不同其餘資訊都相同,而這樣分別定義顯然是冗餘的。所以需要引入 requestcontext處理器。

from django.shortcuts import

render_to_response

from django.template import

requestcontext

defcustom_proc(request): # context處理器,它接收乙個 httprequest 物件,然後返回乙個字典

""return

defview_1(request):

#...

return render_to_response('

template1.html',

,context_instance=requestcontext(request, processors=[custom_proc])) # 接受processors引數

defview_2(request):

#...

return render_to_response('

template2.html',

,context_instance=requestcontext(request, processors=[custom_proc]))

上述**中利用 render_to_response 代替了render使得可以不用手動載入模板。值得注意的是,在上面這種方法中雖然看似減少了冗餘**,但是由於需要不斷鍵入processors引數,所以依然不夠簡潔。

所以djang提供對全域性 context 處理器的支援。在settings.py 中,有類似**:

templates =[,},

]

以下方法實現全域性化文字處理器。

在context_processors.py中建立你需要定義的處理器,使每個context處理器完成盡可能小的功能。

將該文字處理器引入到context_processors目錄下,如上文**。

特別的,不去額外定義 context_processors.py ,而在 views.py 中直接寫好custom_proc後,則可以將其目錄加入到context_processors中。eg:上述**中的def custom_proc(request):

3.  呼叫 settings.py 中的配置資訊作為全域性呼叫

site_name = '。。。

的個人部落格

'site_desc = '

python開發 && django開發

'

from django.conf import

settings

defglobal_setting(request):

return

至此,這種方法也不需要在render 或 render_to_response 中指明 context 或 requestcontext 就可以直接在html模板中利用模板變數來進行渲染。

相比之下,還是方法2中較簡單。

Android開發之全域性獲取Context的技巧

第一行 android 高階篇 這本書對於入門來說確實很棒,很簡單明瞭的介紹了android開發中涉及到的方方面面,對我的幫助很大,同時記錄一些該書中一些對我以後開發有用的東西,以方便使用。1 public23 private static context context 45 override 6...

Django獲取全域性request

某些情景下,我們需要在任意函式內獲取request,但是django並沒有給我們提供獲取全域性request的方法。當request到達檢視函式前,會經過中介軟體攔截。我們可以自己寫乙個中介軟體,並設計成單例模式。然後在中介軟體中取得當前request物件,並儲存在中介軟體物件中。middlewar...

計算機中的contex理解

1 其實簡單的說就是跟當前主題有關的所有內容。2 如說到程式的上下文,就是當前這段程式之上和之下的程式段。因為有些變數 函式不一定都定義在一起,而且乙個程式段不是一行就能寫完,之間有有很多的聯絡。就像看英語閱讀或者 等都需要前後理解的。3 而 裝置上下文 the device context 是一種...