检查Jinja2中的数组是否为空

dan*_*l__ 34 jinja2

我需要检查变量texts是否已定义index.html.

如果定义了变量而不是空,那么我应该渲染循环.否则,我想显示错误消息{{error}}.

基本上这在PHP中

if (isset($texts) && !empty($texts)) {
    for () { ... }
}
else {
    print $error;
}
Run Code Online (Sandbox Code Playgroud)

的index.html

{% for text in texts %} 
    <div>{{error}}</div>
    <div class="post">
        <div class="post-title">{{text.subject}}</div>
        <pre class="post-content">{{text.content}}</pre>
    </div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我怎么说在jinja2?

phs*_*phs 39

要测试存在("定义"?),请使用is defined.

要测试当前列表是否为空,请使用列表本身作为条件.

虽然它似乎不适用于您的示例,但如果您需要除循环之外的其他内容,则此形式的空白检查非常有用.

一个人为的例子可能是

{% if (texts is defined) and texts %}
    The first text is {{ texts[0] }}
{% else %}
    Error!
{% endif %}
Run Code Online (Sandbox Code Playgroud)


and*_*ler 31

我认为你最好的选择是定义()检查以及通过length()函数查看数组长度的组合:

{% if texts is defined and texts|length > 0 %}
    ...
{% endif %}
Run Code Online (Sandbox Code Playgroud)

  • `texts | length> 0`等同于`texts` - 布尔测试中的空列表求值为`false`. (6认同)

Tad*_*eck 22

看一下Jinja2的文档defined():http://jinja.pocoo.org/docs/templates/#defined

{% if variable is defined %}
    value of variable: {{ variable }}
{% else %}
    variable is not defined
{% endif %}
Run Code Online (Sandbox Code Playgroud)

它够清楚了吗?在你的情况下,它可能看起来像这样:

{% if texts is defined %}
    {% for text in texts %} 
        <div>{{ error }}</div>
        <div class="post">
            <div class="post-title">{{ text.subject }}</div>
            <pre class="post-content">{{ text.content }}</pre>
        </div>
    {% endfor %}
{% else %}
    Error!
{% endif %}
Run Code Online (Sandbox Code Playgroud)

  • 根据原始问题,这错过了一个空的定义数组的边缘情况,这也应该是一个错误. (41认同)
  • @PatrickMutuku 空但已定义数组的情况可以由 {% if texts %} 处理 (5认同)

Mat*_*don 6

文档所述,您还可以写:

{% for text in texts %}
    <div class="post">
        <div class="post-title">{{text.subject}}</div>
        <pre class="post-content">{{text.content}}</pre>
    </div>
{% else %}
    <div>{{ error }}</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

它处理texts未定义的情况和texts空的情况.


小智 5

这是一个简洁而简单的解决方案,对我来说效果很好!

{% if texts is defined and texts[0] is defined %}
    ...
{% endif %}
Run Code Online (Sandbox Code Playgroud)