我需要检查变量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)
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)
{% 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)