Django中context上下文怎麼用

2021-10-13 23:21:56 字數 2438 閱讀 5320

很多時候設定乙個模板變數而非返回值也很有用。 那樣,模板作者就只能使用模板標籤所設定的變數。

要在上下文中設定變數,在 render() 函式的context物件上使用字典賦值。 這裡是乙個修改過的 currenttimenode ,其中設定了乙個模板變數 current_time ,並沒有返回它:

class

currenttimenode2

(template.node)

:def

__init__

(self, format_string)

: self.format_string =

str(format_string)

defrender

(self, context)

: now = datetime.datetime.now(

) context[

'current_time'

]= now.strftime(self.format_string)

return

''

(我們把建立函式do_current_time2和註冊給current_time2模板標籤的工作留作讀者練習。)

注意 render() 返回了乙個空字串。 render() 應當總是返回乙個字串,所以如果模板標籤只是要設定變數, render() 就應該返回乙個空字串。

你應該這樣使用這個新版本的標籤:

the time is}.

<

/p>

但是 currenttimenode2 有乙個問題: 變數名 current_time 是硬編碼的。 這意味著你必須確定你的模板在其它任何地方都不使用 } ,因為 會盲目的覆蓋該變數的值。

一種更簡潔的方案是由模板標籤來指定需要設定的變數的名稱,就像這樣:

the current time is}.

<

/p>

為此,你需要重構編譯函式和 node 類,如下所示:

import re

class

currenttimenode3

(template.node)

:def

__init__

(self, format_string, var_name)

: self.format_string =

str(format_string)

self.var_name = var_name

defrender

(self, context)

: now = datetime.datetime.now(

) context[self.var_name]

= now.strftime(self.format_string)

return

''def

do_current_time

(parser, token)

:# this version uses a regular expression to parse tag contents.

try:

# splitting by none == splitting by spaces.

tag_name, arg = token.contents.split(

none,1

)except valueerror:

msg =

'%r tag requires arguments'

% token.contents[0]

raise template.templatesyntaxerror(msg)

m = re.search(r'(.*?) as (\w+)'

, arg)

if m:

fmt, var_name = m.groups(

)else

: msg =

'%r tag had invalid arguments'

% tag_name

raise template.templatesyntaxerror(msg)

ifnot

(fmt[0]

== fmt[-1

]and fmt[0]

in('"',

"'")):

msg =

"%r tag's argument should be in quotes"

% tag_name

raise template.templatesyntaxerror(msg)

return currenttimenode3(fmt[1:

-1], var_name)

現在 do_current_time() 把格式字串和變數名傳遞給 currenttimenode3 。

Django中全域性Context處理器

1.模板標籤和模板變數 模板標籤在中定義 thanks for logging in please log in.模板變數在 中定義 my first name is my last name is 2.context處理器和 requestcontext處理器 context 是乙個傳遞給模板的名...

在Django框架中編寫Context處理器的方法

寫context處理器的一些建議 編寫處理器的一些建議 使每個context處理器完成盡可能小的功能。使用多個處理器是很容易的,所以你可以根據邏輯塊來分解功能以便將來復用。要注意 template context processors 裡的context processor 將會在基於這個setti...

Android 中呼叫全域性Context

經常需要用到系統的一些功能必須傳遞context物件,往往有時候不方便傳遞當前的context或者即使能夠傳遞context也非常麻煩,比如 audiomanager aduiomanager audiomanager context.getsystemservice context.audio s...