2010-07-16 382 views
1

我在顯示模板中的嵌套塊時遇到問題。塊內的塊

例如。

{% for category in categories %} 

     //code to display category info 

     {% products = products.object.filter(category = category) %} 
     {% for product in products%} 
       //code to display product info 
     {% endfor %} 
    {% endfor %} 

我收到了「無效塊標記:'endfor'」錯誤。

任何想法?

+1

「塊」在Django的模板語言特定的含義,這是不是。 – 2010-07-16 11:04:35

+0

@Ignacio Vazquez-Abrams是對的,你的意思是一個'標籤':http://docs.djangoproject.com/en/1.2/topics/templates/#tags – 2010-07-16 11:07:08

+2

是{%products = products.object.filter (category = category)%}'在Django模板中合法嗎? – 2010-07-16 11:08:06

回答

0

我認爲你不能使用方法的參數。你必須修改你的類的對象,這樣你卡恩使用:

{% for product in category.products %} 
0
{% products = products.object.filter(category = category) %} 

不被認爲是在Django模板系統的有效標籤。因此,django抱怨缺少的endfor,儘管{%for x in y%)不是錯誤。

這應該工作

{% for category in categories %} 
    {% for product in products.object.all %} 
     //code to display product info 
    {% endfor %} 
{% endfor %} 

但是,這並不是說,你想達到的目標。只是你無法通過參數category來篩選product.objects

你必須寫你自己的標籤,它需要過濾參數或重新思考你的問題。

+0

我已經將過濾抽象爲類別中的方法:例如category.get_products,所以現在我的內部循環顯示如下:{%products = category.get_products%} {%產品中產品%} //代碼顯示產品信息{% endfor%}仍然收到相同的錯誤? – Philip 2010-07-16 12:19:09

1

您不能分配給Django模板系統中的變量。您兩次嘗試:

{% products = products.object.filter(category = category) %} 

{% products = category.get_products %} 

均爲無效Django的語法。

一些Python模板系統類似於PHP:它們允許您將Python代碼嵌入到HTML文件中。 Django不以這種方式工作。 Django定義了它自己的簡化語法,並且該語法不包含賦值。

你可以這樣做:

{% for category in categories %} 

    //code to display category info 
    {% for product in category.get_products %} 
      //code to display product info 
    {% endfor %} 
{% endfor %}