context processor 上下文處理器

2022-03-26 14:54:58 字數 1561 閱讀 4454

部落格裡面有三個地方用到了標籤雲:主頁面,分類頁面,部落格詳情頁面,於是有了下面一段**

# 主頁面

@main.route("/")

def index():

tags = tag.query.all()

# ...省略部分**

return render_html("index.html", tags=tags,)

# 分類頁面

@main.route("tag/")

def tags(id):

tags = tag.query.all()

# ...省略部分**

return render_html("tags.html", tags=tags,)

# 部落格詳情頁面

@main.route("post/")

def post(id):

tags = tag.query.all()

# ...省略部分**

return render_html("post.html", tags=tags,post=post)

好像問題解決了?所有頁面都能顯示出來標籤雲了? 但是這三個頁面都回傳 tags 會不會太難看了一些,完全不優雅了嘛,有沒有好的辦法呢? 答案自然是有的,接下來就到我們的重點了。

registers a template context processor function.
翻譯過來很簡單: 註冊模板上下文處理器功能。 這個真能解決我們的問題嗎?別著急讓我們試一下,把之前的**改造一下。

def peach_blog_menu():

tags = tag.query.all()

return dict(tags=tags)

@main.route("/")

def index():

# ...省略部分**

return render_html("index.html")

# 分類頁面

@main.route("tag/")

def tags(id):

# ...省略部分**

return render_html("tags.html")

# 部落格詳情頁面

@main.route("post/")

def post(id):

tags = tag.query.all()

# ...省略部分**

return render_html("post.html")

是不是發現什麼消失了? tags 好像從之前的幾個函式中消失了,沒有回傳到前台,能訪問到嗎?自然是可以的。原因自然是 context_processor 了,它可以將我們的定義變數在所有模板中可見。

如何使用呢?

1. 如上述**那樣, context_processor 作為乙個裝飾器修飾乙個函式

2. 函式的返回結果必須是 dict, 然後其 key 將會作為變數在所有模板中可見

當你的很多檢視函式中需要回傳乙個相同的變數的時候,這個時候就可以考慮使用 context_processor 了

上下文 上下文棧

全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...

中斷上下文 程序上下文

在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...

全域性上下文與上下文

全域性上下文由main函式載入系統的主架構和主事件迴圈和全域性資料構成。是上帝創造世界時,建立的基礎事物。萬物之始,大道至簡,衍化至繁。全域性上下文代表著程式執行所需要的基礎資源。是程式執行的基礎。全域性上下文的特徵是在程式執行期間常駐記憶體。全域性上下文的生命週期和應用程式的生命週期相同。與應用程...