Jinja2 中的 if 语句

Posted

技术标签:

【中文标题】Jinja2 中的 if 语句【英文标题】:If statement on for statement in Jinja2 【发布时间】:2014-06-01 11:48:22 【问题描述】:

我有一个托管在 GAE 中的网站,在我的 Jinja2 模板中,我在 FOR 语句中有一个 IF 语句。

我启用了我的 jinja2.ext.loopcontrols 循环控制,使用:

template_dir = os.path.dirname(__file__)
ENV = jinja2.Environment(loader=jinja2.FileSystemLoader(template_dir),
                                       autoescape=True,
                                       extensions=['jinja2.ext.autoescape',
                                                   'jinja2.ext.loopcontrols'])

我的模板如下所示:

% for i in data %
  (% if i.date_posted is defined %)
     i.date_posted.strftime('%d %b %Y') 
  % else %
    No
  % endif %
% endfor %

我不断收到错误:

TemplateSyntaxError:遇到未知标签“endif”。 Jinja 正在寻找以下标签:“endfor”。需要关闭的最里面的块是'for'。

【问题讨论】:

【参考方案1】:

您没有正确声明您的if 标签:

(% if i.date_posted is defined %)

注意括号而不是花括号;它应该写成:

% if i.date_posted is defined %

【讨论】:

啊伙计!所有这一切都是为了这么简单的事情。也许是我该买新眼镜的时候了。 :) 谢谢! @JasperJohns:你用什么编辑器?我对 Textmate 和 Sublime Text 使用 Jinja2 syntax bundle,这会使差异更加明显。 我使用的是 Aptana Studio 3,Sublime Text 是免费的吗?我只是看了看,到目前为止我非常喜欢它。感谢您的建议! @JasperJohns:Sublime Text 可以免费评估;当您保存文件以购买许可证以供继续使用时,它会不时唠叨您。 Sublime Text 3 目前处于测试阶段,在正式发布之前是免费的。 @JasperJohns:显然 Aptana Studio 3 支持 Django 模板; Jinja2 很大程度上基于相同的语法,您可以尝试看看 Django 模板语法高亮器是否有帮助。

以上是关于Jinja2 中的 if 语句的主要内容,如果未能解决你的问题,请参考以下文章

在 Jinja2 If/elif 语句中加入字典元素

在 Ansible/Jinja2 中设置 var 的 case 语句

GAE / Python / jinja2 / 如何在join语句中引用子目录

ansible基础-Jinja2模版 | 测试

Jinja2-隐藏在源代码中显示的语句

SSTI之细说jinja2的常用构造及利用思路