所以事實證明,下面的例子會工作,如果你的移動上方延伸的註釋標記標籤。根據Django docs:「如果在模板中使用{%extends%},它必須是該模板中的第一個模板標記,否則模板繼承將不起作用。」
原題:
我還是相當新的Django的,所以我做了一些谷歌搜索,但未能找到任何幫助。道歉,如果這是重複的!
方案
比方說,我有一個數字,共享相同的超類不同型號的,我要顯示所有共同領域的一個部分:
{% comment %}
Template:
_model_attribute_list.html
Args:
models: A collection of models that inherit from the same superclass
{% endcomment %}
{% for model in models %}
<ul>
<li>Common Attribute 1: {{ model.common_attribute_1 }}</li>
<li>Common Attribute 2: {{ model.common_attribute_2 }}</li>
<li>Common Attribute 3: {{ model.common_attribute_3 }}</li>
</ul>
{% endfor %}
很容易的。現在我不僅要展示這些屬性,而且還要展示特定模型特有的屬性。而不是重複這部分N次,我想補充塊:
{% comment %}
Template:
_model_attribute_list.html (with blocks added)
Args:
models: A collection of models that inherit from the same superclass
{% endcomment %}
{% for model in models %}
<ul>
{% block leading_attributes %}{% endblock %}
<li>Common Attribute 1: {{ model.common_attribute_1 }}</li>
<li>Common Attribute 2: {{ model.common_attribute_2 }}</li>
<li>Common Attribute 3: {{ model.common_attribute_3 }}</li>
{% block trailing_attributes %}{% endblock %}
</ul>
{% endfor %}
,並有其他型號的具體諧音覆蓋他們,使他們可以包括自定義字段:
{% comment %}
Template:
_model1_attribute_list.html
Args:
models: A collection of Model1
{% endcomment %}
{% extends '_model_attribute_list.html' %}
{% block leading_attributes %}
<li>Custom Attribute 1: {{ model.custom_attribute_1 }}</li>
<li>Custom Attribute 2: {{ model.custom_attribute_2 }}</li>
{% endblock %}
按照Django docs ,當擴展模板時:
...模板引擎會注意到[父模板]中的...塊標籤,並用子模板的內容代替這些塊
鑑於文檔說什麼,爲什麼不工作?
我的假設是,當模板引擎呈現模板時,它會在評估循環之前插入塊,導致錯誤,因爲model.custom_aatribute_N
的值尚不存在。
此外,我實際上沒有看到任何錯誤,但該模板未呈現。有沒有辦法讓Django在這種情況下吐出錯誤?
謝謝!
我想通了,而且事實證明我的例子會工作...如果我移動的 「擴展」在評論前標記。男孩我感到愚蠢!無論如何,我會把你標記爲正確的答案,因爲你花時間幫助我。謝謝你的幫助! – Steve