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

030*_*030 7 jinja2

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

尝试

{% if int(variable) %} hello {% endif %}
Run Code Online (Sandbox Code Playgroud)

结果

'int' is undefined"
Run Code Online (Sandbox Code Playgroud)

小智 10

对于任何使用Salt的人来说,当放入saltstack状态时,这对我来说不起作用.

{% if variable|number %} hello {% endif %}
Run Code Online (Sandbox Code Playgroud)

这确实有效:

{% if variable is number %} hello {% endif %}
Run Code Online (Sandbox Code Playgroud)


abi*_*son 6

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

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

{% if variable|int != 0 %} hello {% endif %}
Run Code Online (Sandbox Code Playgroud)

默认情况下,如果强制转换为int失败,它将返回0,但是您可以通过将其他默认值指定为第一个参数来更改此值。在这里,对于0可能是有效值的情况,我将其更改为-1 variable

{% if variable|int(-1) != -1 %} hello {% endif %}
Run Code Online (Sandbox Code Playgroud)

请参阅:Jinja2 Docs-内置内置过滤器以获取更多信息

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

更好的解决方案int是使用内建测试number,而不是使用过滤器(后者会将类似字符串的整数转换为int):

{% if variable is number %} hello {% endif %}
Run Code Online (Sandbox Code Playgroud)

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

  • `{% if variable|number %}` 引发 `jinja2.exceptions.TemplateAssertionError: no filter named 'number'`,但是 `{% if variable is number %}` 可以完成这项工作 (2认同)