块内的块

时间:2010-07-16 10:57:19

标签: python django django-templates block

我在模板中显示嵌套块时遇到问题。

例如。

   {% 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'”错误。

有什么想法吗?

3 个答案:

答案 0 :(得分: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 %}

答案 1 :(得分:0)

我认为你不能为方法使用参数。您必须修改类别对象,以便可以使用:

{% for product in category.products %}

答案 2 :(得分: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 %}

但这不是那个,你想要实现的目标。您只能使用参数product.objects过滤category

您必须编写自己的标记,其中包含过滤或重新考虑问题的参数。