繁体   English   中英

Jinja2 模板中的条件子串

[英]Conditional substring in a Jinja2 template

使用 ansible 进行部署时,有一种特殊情况,我需要去除尾随-p子字符串的字符串。

只有当-p位于末尾时,字符串somemachine-prod-p应该变成somemachine-prod

我看到可以与 Jinja 一起使用的 substring 函数不能满足我的需求,因为我需要去掉字符串的结尾,而不是开头。

想法?

找到了。

如果有人想知道:

{% if name.endswith('-p') %}
{{ name[:-2] }}
{% else %}
{{ name }}
{% endif %}

对于简单的子串...

"{{var_name[start:end]}}"

其中 start 是起始位置(偏移量 0)而 end 是结束位置(偏移量 1)......似乎!

这个问题的标题表明只想从变量中获取子字符串。 大多数其他搜索结果都有类似的标题,但会给出特定的响应,例如分割路径等。这适用于像我一样难以找到这样一个基本内容的人。

有一个更好的“oneliner”: {{ name | regex_replace('-p$','') }} {{ name | regex_replace('-p$','') }}

从文档中您可以将其包装成条件

truncate (s, length=255, killwords=False, end='...', leeway=None)

返回字符串的截断副本。 长度由第一个参数指定,默认为 255。如果第二个参数为真,过滤器将按长度剪切文本。 否则它将丢弃最后一个字。 如果文本实际上被截断,它将附加一个省略号(“...”)。 如果你想要一个不同于“...”的省略号,你可以使用第三个参数来指定它。 长度仅超出第四个参数中给出的容差范围的字符串将不会被截断。

{{ "foo bar baz qux"|truncate(9) }}

-> "foo..."

{{ "foo bar baz qux"|truncate(9, True) }}

-> "foo ba..."

{{ "foo bar baz qux"|truncate(11) }}

-> "foo bar baz qux"

{{ "foo bar baz qux"|truncate(11, False, '...', 0) }}

-> "foo bar..."

较新 Jinja 版本的默认余量是 5,之前是 0,但可以全局重新配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM