Jinja2 中如何检查变量是否为整数?

问题描述 投票:0回答:4

目的是检查变量是否为整数,如果是则插入 hello。

尝试

{% if int(variable) %} hello {% endif %}

结果

'int' is undefined"
jinja2
4个回答
29
投票

要使用 Jinja2
int
内置过滤器(尝试将值转换为 int):

您需要使用过滤格式,如下所示:

{% if variable|int != 0 %} hello {% endif %}

默认情况下,如果转换为 int 失败,则返回 0,但您可以通过指定不同的默认值作为第一个参数来更改此设置。在这里,对于 0 可能是

variable
的有效值的情况,我将其更改为 -1。

{% if variable|int(-1) != -1 %} hello {% endif %}

请参阅:Jinja2 文档 - int 内置过滤器了解更多信息

要使用 Jinja2
number
内置测试(如果变量已经是数字,则返回 true):

更好的解决方案是使用内置测试

int
,而不是使用
number
过滤器(它将像字符串这样的整数转换为 int),如下所示:

{% if variable is number %} hello {% endif %}

请参阅:Jinja2 文档 - 数字内置测试


12
投票

对于任何使用 Salt 的人来说,当 put 处于 saltstack 状态时,这对我不起作用。

{% if variable|number %} hello {% endif %}

但这确实有效:

{% if variable is number %} hello {% endif %}

3
投票

这些解决方案都不适合我,但这确实有效:

{% if variable is even or variable is odd %}


0
投票

测试上述解决方案时存在测试问题

is number
,它在字符串变量上失败,即
'123'

亚姆尔:

val:
- '123'
- 456
- '3bce'

金贾:

{% for v in val %}
{% if v is number %}
Is number test: {{ v }}
{% endif %}
{% if v|int != 0 %}
To int test: {{ v }}
{% endif %}
{% endfor %}

结果:

To int test: 123
Is number test: 456
To int test: 456
© www.soinside.com 2019 - 2024. All rights reserved.