Jinja2通过空格分割字符串

20

我正在使用Jinja2模板引擎(+pelican)。

我有一个字符串,其内容为“a 1”,我正在寻找一种方法来使用空格作为分隔符将该字符串分为两部分。

所以最终我要得到的结果是一个变量,它包含了两个值,以数组的形式呈现。例如,str [0] 的值为“a”,而str [1] 的值为“1”。

提前致谢。

6个回答

28

调用字符串的split方法应该就可以解决问题:

"a 1".split()

@Loïc 我认为我曾经在使用 Ansible 时使用过类似的东西,它使用 Jinja2。所以可能这取决于情况?对此我不是很确定。 - Jakub Kotowski
只是确认 {% for hostname in allowed_hosts.split() %} 可以正常工作。因此我认为你也可以使用 {% set hostnames=allowed_hosts.split() %},但我还没有测试过后者。 - Michael Nelson
2
@MichaelNelson的后一种方法也可以运行。{% for instance in instances %} {% set route_name=instance.split(' ')[1] %} BalancerMember http://{{ instance }} route={{ route_name }} {% endfor %} - naoko
1
有人知道split()的文档在哪里吗?我找不到它。 - Matthew Cornell
@jkbkot 哎呀!我一直以为 什么都没有 传递到模板中了 :-O - Matthew Cornell
显示剩余2条评论

17

我也遇到了同样的问题,并且没有找到有用的东西,所以我只是创建了一个自定义过滤器:

def split_space(string):
    return string.strip().split()

将其添加到过滤器列表中(使用Flask):

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 %}

4

我的解决方案已在iPython中进行了测试。

In [1]: from jinja2 import Template
In [2]: Template("{{s.split('-')}}").render(s='a-bad-string')
Out[2]: u"['a', 'bad', 'string']"

3

3
我建议使用类似以下的内容:

我建议采用类似以下方式:

str = "a 1 b 2 c 3"
val = atr.split()

此外,如果您想指定特定位置,则可以使用类似以下内容的代码:
val1 = atr.split()[2]

这将把第二个值放入 val1 中。

0

你也可以使用装饰器来实现这个功能:

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()

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