Jinja: 我们可以得到一个 {% empty %} 标签吗?

创建于 2011-12-02  ·  5评论  ·  资料来源: pallets/jinja

Django 有一个非常酷的标签,叫做 {% empty %},它可以让你这样做:

{% for item in list %}
    <tr><td>{{ item }}</td></tr>
{% empty %}
    <tr><td>Nothing to show!</td></tr>
{% endfor %}

这是缩写

{% if list %}
    {% for item in list %}
        <tr><td>{{ item }}</td?</tr>
    {% endfor %}
{% else %}
    <tr><td>Nothing to show!</td></tr>
{% endif %}

自从切换到 jinja,我真的很怀念这个标签 :(

最有用的评论

那已经存在了。 在 for 循环中使用{% else %} 。 不幸的是,在 Django 创建空之前我们还有其他东西,现在重命名它以匹配 Django 语义有点奇怪。

所有5条评论

那已经存在了。 在 for 循环中使用{% else %} 。 不幸的是,在 Django 创建空之前我们还有其他东西,现在重命名它以匹配 Django 语义有点奇怪。

哦,我明白了。 也许在 django 部分下的“从其他模板引擎切换”中记下这一点?

我在切换文档中没有看到这一点。 在control s tructures:for文档中提到了它,但将它放在切换文档中会很有帮助...

如果代码中的list是生成器,并且forif块的工作方式与 Python 中的相同,则if-for构造不能解决问题因为生成器总是真实的,而且这样的构造比empty块更不惯用。

我不知道您是否可以添加一个标志来检查循环是否已运行,检查NameError: name 'item' is not defined或在 Jinja 级别将辅助变量添加到list(generator) 。 如果不是,那么唯一的解决方案是添加empty块或说服 Python 开发人员空生成器应该是虚假的(通过处理StopIteration和“推回”弹出项目来避免丑陋的检查)。

Jinja 中的else块已经像 Django 中的empty块一样工作。 这里不需要改变。

此页面是否有帮助?
0 / 5 - 0 等级