【问题标题】:Strting for loop tag inside if else tag raise error如果 else 标记引发错误,则内部循环标记的字符串
【发布时间】:2017-10-04 21:12:39
【问题描述】:

在 jinja 模板中,我的脚本中有一个 for 循环,开始标记 {% for each in list_one %} 和结束标记 {% endfor %}

我想设置 2 个条件来选择 for 循环的起始标记来工作。像这样的:

{% if name %}
    {% for each in list_one %}
{% else %}
    {% for each in list_two %}
        {{ each }}
{% endif %}
    {% endfor %}

我面临的错误是:

jinja2.exceptions.TemplateSyntaxError:遇到未知标签“endif”。 您可能犯了嵌套错误。 Jinja 期待这个标签,但是 目前正在寻找“endfor”或“else”。最里面的块 需要关闭的是'for'。

【问题讨论】:

  • 在 if 或 else 部分开始 for 意味着您也必须在该部分结束它。现在你在 if 和 else 中开始 for,并在 endif 之后结束它。将它们视为 HTML 标记,它们成对出现并需要正确嵌套
  • 这对你不起作用。您必须在 if 关闭之前关闭 for 循环。

标签: python for-loop if-statement jinja2


【解决方案1】:

您正在尝试在ifelse 块中使用for 循环。但是您错过了在关闭 ifelse 块之前关闭 for 循环。

正确的代码是这样的:

{% if name %}
    {% for each in list_one %}
    {% endfor %}
{% else %}
    {% for each in list_two %}
        {{ each }}
    {% endfor %}
{% endif %}

【讨论】:

    【解决方案2】:

    您必须在 if 子句之前关闭 for 循环。为了决定迭代哪个列表,您可以这样做:

    {% if name %}
        {% set desired_list = list_one %}
    {% else %}
        {% set desired_list = list_two %}
    {% endif %}
    {% for each in desired_list %}
        {{ each }}
    {% endfor %}
    

    【讨论】:

    • 我同意,这就是这样做的方式......(投票赞成)
    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2020-12-03
    • 2020-01-29
    • 2021-05-29
    相关资源
    最近更新 更多