【发布时间】:2023-04-02 08:13:01
【问题描述】:
我正在使用 Jinja2 模板引擎 (+pelican)。
我有一个字符串“a 1”,我正在寻找一种方法将该字符串一分为二 通过使用空白作为分隔符。
所以我正在寻找的最终结果是一个以数组形式保存两个值的变量。例如str[0] 的计算结果为“a”,而 str[1] 的计算结果为“1”。
提前致谢。
【问题讨论】:
我正在使用 Jinja2 模板引擎 (+pelican)。
我有一个字符串“a 1”,我正在寻找一种方法将该字符串一分为二 通过使用空白作为分隔符。
所以我正在寻找的最终结果是一个以数组形式保存两个值的变量。例如str[0] 的计算结果为“a”,而 str[1] 的计算结果为“1”。
提前致谢。
【问题讨论】:
在字符串上调用 split 应该可以解决问题:
"a 1".split()
【讨论】:
{% for instance in instances %} {% set route_name=instance.split(' ')[1] %} BalancerMember http://{{ instance }} route={{ route_name }} {% endfor %}
我遇到了同样的问题,但没有发现任何有用的东西,所以我只是创建了一个自定义过滤器:
def split_space(string):
return string.strip().split()
将其添加到过滤器列表(带有烧瓶):
app = Flask(__name__)
def split_space(string):
return string.strip().split()
#some code here
if __name__ == '__main__':
app.jinja_env.filters['split_space'] = split_space
app.run()
并在模板中使用它:
{% if "string" in element|split_space %} ... {% endif %}
【讨论】:
我的解决方案在 iPython 中进行了测试
In [1]: from jinja2 import Template
In [2]: Template("{{s.split('-')}}").render(s='a-bad-string')
Out[2]: u"['a', 'bad', 'string']"
【讨论】:
我制作了一个与 Loïc 的答案相同的小插件,但它可以选择指定分隔符。 https://github.com/timraasveld/ansible-string-split-filter
它允许你输入:
# my_variable = 'a 1`
{ my_variable | split | join(' and ') } #=> a and 1
【讨论】:
我建议使用类似的东西:
str = "a 1 b 2 c 3"
val = atr.split()
另外,如果你想指向一个特定的位置,那么你可以使用类似的东西:
val1 = atr.split()[2]
这会将第二个值放入val1。
【讨论】:
你也可以用装饰器来做到这一点:
from flask import Flask
app = Flask(__name__)
@app.template_filter('split_space')
def split_space_filter(s):
return s.strip().split()
if __name__ == '__main__':
app.run()
【讨论】: