Jinja 将字符串转换为整数

34

我正在尝试将使用正则表达式解析的字符串转换为数字,以便我可以在Jinja2中进行乘法运算。该文件是一个模板,可在ansible脚本中使用。

我有一系列 items,它们都采用 <word><number> 的形式,例如 aaa01aaa141bbb05

我的想法是解析单词和数字(忽略前导零),并稍后在模板中使用它们。

我想通过乘法来操作数字并使用它。以下是我目前所做的:

```

{% macro get_host_number() -%}
{{ item | regex_replace('^\D*[0]?(\d*)$', '\\1') }}
{%- endmacro %}

{% macro get_host_name() -%}
{{ item | regex_replace('^(\D*)\d*$', '\\1') }}
{%- endmacro %}

{% macro get_host_range(name, number) -%}
{% if name=='aaa' %}
{{ ((number*5)+100) | int | abs }}
{% elif name=='bbb' %}
{{ ((number*5)+200) | int | abs }}
{% else %}
{{ ((number*5)+300) | int | abs }}
{% endif %}
{%- endmacro %}

{% set number = get_host_number() %}
{% set name = get_host_name() %}
{% set value = get_host_range(name, number) %}

Name: {{ name }}
Number: {{ number }}
Type: {{ value }}

使用上述模板时,我遇到了一个错误 coercing to Unicode: need string or buffer, int found。我想这是告诉我它不能将字符串转换为整数,但我不明白原因。我看过一些示例,可以这样做并且能够正常工作。


那个错误信息意味着你传递了一个整数,而它期望的是一个字符串。这个错误发生在哪一行? - larsks
1个回答

70

在使用正则表达式匹配数字后,您需要将字符串转换为整数:

{% set number = get_host_number() | int %}

那么在 get_host_range 宏中没有必要使用 | int


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接