【问题标题】:Blocks within blocks块内块
【发布时间】:2011-03-16 21:35:23
【问题描述】:

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

例如。

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

有什么想法吗?

【问题讨论】:

  • “block”在Django的模板语言中是有特定含义的,不是这个。
  • @Ignacio Vazquez-Abrams 是对的,你的意思是 tag: docs.djangoproject.com/en/1.2/topics/templates/#tags
  • {% products = products.object.filter(category = category) %} 在 Django 模板中合法吗?
  • 假设由于“无效的块标签”而被阻止。道歉。我对 Django 有点陌生,所以通过反复试验学习 =P
  • 我已经将过滤抽象为类别中的一个方法:例如 category.get_products 所以现在我的内部循环显示:{% products = category.get_products %} {% for product in products%} //显示产品信息的代码 {% endfor %} 仍然出现同样的错误?

标签: python django django-templates block


【解决方案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 %}

【讨论】:

    【解决方案2】:

    我认为您不能将争论用于方法。您必须修改您的类别对象,以便您可以使用:

    {% for product in category.products %}
    

    【讨论】:

      【解决方案3】:
      {% 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

      您必须编写自己的标签,该标签在过滤或重新考虑您的问题时接受参数。

      【讨论】:

      • 我已经将过滤抽象为类别中的一个方法:例如 category.get_products 所以现在我的内部循环显示:{% products = category.get_products %} {% for product in products%} //显示产品信息的代码 {% endfor %} 仍然出现同样的错误?
      猜你喜欢
      • 1970-01-01
      • 2017-03-09
      • 2021-07-17
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多