如果 else 标记引发错误,则内部循环标记的字符串

Posted

技术标签:

【中文标题】如果 else 标记引发错误,则内部循环标记的字符串【英文标题】:Strting for loop tag inside if else tag raise error 【发布时间】: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 循环。 【参考方案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 %

【讨论】:

我同意,这就是这样做的方式......(投票赞成)

以上是关于如果 else 标记引发错误,则内部循环标记的字符串的主要内容,如果未能解决你的问题,请参考以下文章

垃圾回收机制

如果组中的最后一个元素包含Pandas中的特定字符串,则标记

标记字符串,识别字符时出错

如果字符串不在一个或多个列表中,则引发错误

.NET 中字符串比较的最佳做法

Python 练习:如果 s 不是上面指定的格式,则引发异常 SyntaxError