2013-12-19 90 views
14

我使用Jinja2模板引擎(+ pelican)。Jinja2由空格分割字符串

我有一个字符串说“1”,而我正在寻找一种方式使用空格作为分隔符拆分该字符串两个 。

因此,我期待的最终结果是一个变量,它以数组的形式保存这两个值。例如str [0]评估为“a”& str [1]评估为“1”。

在此先感谢。

回答

14

我有同样的问题,并没有发现任何有用的东西,所以我刚刚创建自定义过滤器:

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

呼吁字符串分割应该做的伎俩:

"a 1".split() 
+0

@卢瓦克我想我已经使用Ansible类似的东西,它使用的Jinja2。所以也许它取决于?我对此不太确定。 –

+0

只需确认{allowed for host_split()%}中的主机名即可正常工作。所以我假设你也可以做{%set hostnames = allowed_hosts.split()%},但没有测试过后者。 –

+1

@ MichaelNelson的后一种方法也适用。 (%) {%set route_name = instance.split('') endof%}' – naoko

2

我的解决办法是在IPython的测试

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

我会建议使用这样的:

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