2014-04-04 76 views
1

我試圖創建包含標籤,因此我可以在每個頁面的導航欄中顯示數據。標籤將被包含在「base.html」中,以便它應該在任何地方顯示。Django包含標籤不顯示數據

tags.py

@register.inclusion_tag('menu.html') 
def show_hoods(HoodList): 
    gethoods = Hood.objects.all() 
    return {'gethoods': gethoods} 

menu.html

{% for hood in gethoods %} 
<h3>{{ hood.name }}</h3> 
{% endfor %} 

出於某種原因,menu.html模板是空白的,並且不顯示任何數據。另外,一旦我運行了menu.html,簡單的{%include'menu.html'%}會在base.html裏面工作嗎?會自動呈現嗎?

編輯: 基於下面的反饋,上述代碼是正確的,但是base.html文件代碼是不正確的使用inclusion_tag未裝載有{%包括%}但{% load %}代替。

修正base.html文件

{% load tags %} 
{% show_hoods hoodlist %} 

感謝您的反饋!

+0

你如何在base.html中添加包含標籤?另外,什麼是HoodList? –

+0

HoodList只是該請求的名稱,我應該將其重命名爲「請求」嗎?根據我計劃使用{%include%}標記的base.html。 – WayBehind

+1

使用名稱添加包含標籤。因此,在base.html中添加{%show_hoods%}應該使用Hood對象列表來呈現menu.html。直接查看menu.html會顯示爲空,因爲menu.html需要show_hoods中傳入的上下文變量(gethoods)。 –

回答

1

直接查看menu.html模板將不會顯示任何內容,因爲它沒有設置上下文變量。 gethoods將爲空,因此模板中的for循環將沒有任何內容循環。

包含標記的主要目的之一是設置額外的上下文變量,然後使用這些變量呈現模板。直接查看模板將顯示沒有變量的模板,但包括包含模板(您的案例中的{$ show_hood %})將添加上下文變量(gethoods)並使用它們呈現模板。

回答第二個問題時,您使用名稱(默認情況下的功能名稱)而不是{% include %}標籤添加包含模板。 {% include %}標記適用於當您只需將一個模板渲染到另一個模板內,以及它不需要任何上下文變量或使用可用於其父模板的上下文變量的情況。

+0

感謝您的詳細信息。 Django對我來說是新手,在過去的10多年裏,我一直在使用應用程序,在那裏編寫代碼,查詢並將渲染模板直接包含到模板中。 :) – WayBehind