2010-06-04 190 views

回答

2

歡迎來到Django模板。

這個問題很容易用DjangoSnippets.com發佈的最早片段之一解決:Expr tag

人們會爭論了一整天關於邏輯從模板中分離,但忽略了有業務邏輯,其所屬的模型或意見,表示邏輯屬於只有在模板 。如果您有很多演示邏輯,您可能需要考慮對部分或全部模板使用Jinja2。警告:儘管Jinja2 看起來像Django的模板語言,但它與Custom Template Tags之類的東西不兼容。

+0

謝謝彼得。我一直在考慮使用獵豹,但從來沒有真正考慮過使用金嘉。我認爲原因是我目前使用Velocity,但現在我習慣於使用Django模板的風格和語法,Jinja可能是一個很好的補充。 – orokusaki 2010-06-06 20:55:36

3

我想你會得到最接近的是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 %}),或者在將其傳遞給視圖之前確定特殊項目。希望有所幫助。

+0

基本上,創建變量的原因是在循環之外使用它。 'with'標籤本身就是一個循環。我稍後需要在頁面中訪問'myvariable'。 – orokusaki 2010-06-04 17:04:12

1

是的,你可以使用with結構:

{% with myvariable as egg %} 
do stuf 
{% endwith %} 
+0

唯一的問題是:'僅在{%with%}和{%endwith%}標記之間存在填充變量(在上例中,總數)。「 – orokusaki 2010-06-04 17:08:08

1

我認爲這可能是最好的做這種檢查並設置行爲的觀點,而不是模板。如果有的話,它會給你更好的控制緩存,如果/當你需要它。

+0

這樣做的問題是我需要這樣做在我所有的觀點。 – orokusaki 2010-06-04 17:12:25

+1

如果您確實需要在所有視圖中執行此操作,則可以創建一個裝飾器或一些中間件來封裝您所需的任何邏輯。 – 2010-06-04 17:16:07

相關問題