我想這樣做:Django - 有沒有辦法在模板中創建一個變量?
{% for egg in eggs %}
<p>{{ egg.spam }}</p>
{% if egg.is_cool %}
{% myvariable = egg %} // Possible in any way?
{% endif %}
{% endfor %}
赦免JavaScript的風格註釋(它顯示爲上SO評論)
我想這樣做:Django - 有沒有辦法在模板中創建一個變量?
{% for egg in eggs %}
<p>{{ egg.spam }}</p>
{% if egg.is_cool %}
{% myvariable = egg %} // Possible in any way?
{% endif %}
{% endfor %}
赦免JavaScript的風格註釋(它顯示爲上SO評論)
歡迎來到Django模板。
這個問題很容易用DjangoSnippets.com發佈的最早片段之一解決:Expr tag。
人們會爭論了一整天關於邏輯從模板中分離,但忽略了有業務邏輯,其所屬的模型或意見,表示邏輯屬於只有在模板 。如果您有很多演示邏輯,您可能需要考慮對部分或全部模板使用Jinja2。警告:儘管Jinja2 看起來像Django的模板語言,但它與Custom Template Tags之類的東西不兼容。
我想你會得到最接近的是with
標籤:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#with。
如果你說想擁有在模板中的項目,我可以想像,做這樣的事情:
<div class="special">
{% with some_list.first as special_item %}
{{ specialitem }}
{% endwith %}
</div>
<div class="everything">
{% for item in some_list %}
{{ item }}
{% endfor %}
</div>
如果你想要一些特殊的邏輯,以確定哪一個是特殊的項目,我想向對象添加一個方法(所以最後得到:上面的{% with some_collection.my_method as special_item %}
),或者在將其傳遞給視圖之前確定特殊項目。希望有所幫助。
基本上,創建變量的原因是在循環之外使用它。 'with'標籤本身就是一個循環。我稍後需要在頁面中訪問'myvariable'。 – orokusaki 2010-06-04 17:04:12
我認爲這可能是最好的做這種檢查並設置行爲的觀點,而不是模板。如果有的話,它會給你更好的控制緩存,如果/當你需要它。
這樣做的問題是我需要這樣做在我所有的觀點。 – orokusaki 2010-06-04 17:12:25
如果您確實需要在所有視圖中執行此操作,則可以創建一個裝飾器或一些中間件來封裝您所需的任何邏輯。 – 2010-06-04 17:16:07
謝謝彼得。我一直在考慮使用獵豹,但從來沒有真正考慮過使用金嘉。我認爲原因是我目前使用Velocity,但現在我習慣於使用Django模板的風格和語法,Jinja可能是一個很好的補充。 – orokusaki 2010-06-06 20:55:36