[英]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.