我有一個 base.html 檔案,它在側邊欄回圈遍歷我的 Spaces 模型內的所有空間并將它們顯示為鏈接。我想知道有沒有辦法將它們放在基本模板中而不是通過每個視圖傳遞這些空間?我嘗試查找它并遇到了模板標簽,但我認為這些不是我要找的。
基本檔案
<div class="sidenav">
<h2>Spaces:</h2>
{% for space in spaces %}
<a href="/{{space}}">{{space}}</a>
{% endfor %}
</div>
現在我正在通過我的視圖傳遞“空間”,但我不想在我創建的每個視圖中都這樣做。
任何幫助,將不勝感激!
uj5u.com熱心網友回復:
為了讓所有模板都有一些全域變數,Django 提供context processor. 背景關系處理器是一個 Python 函式,它將請求物件作為引數并回傳一個添加到請求背景關系的字典。
您可以spaces像這樣在背景關系處理器中添加物件:
app_name/context_processors.py
from .app_name import Space
def spaces(request):
# It must return a dictionary don't forget
return {'spaces': Space.objects.all()}
在您的背景關系處理器中,您使用請求物件實體化空間,并使其作為名為 的變數可用于模板spaces。
設定.py
接下來,您需要在TEMPLATES變數中添加這個自定義背景關系處理器,settings.py如下所示:
TEMPLATES = [
{
# ...
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# Customs
'app_name.context_processors.space',
],
},
]
template.html
現在您可以訪問spaces專案所有模板上的變數。
<div class="sidenav">
<h2>Spaces:</h2>
<!-- spaces variable is in all templates -->
{% for space in spaces %}
<a href="/{{space}}">{{space}}</a>
{% endfor %}
</div>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367909.html
上一篇:WebApi忽略路由屬性
