在Jinja中将字符串拆分为列表?


76

我在jinja2模板中有一些变量,这些变量用';'分隔。

我需要在代码中单独使用这些字符串。即变量为variable1 =“ green; blue”

{% list1 = {{ variable1 }}.split(';') %}
The grass is {{ list1[0] }} and the boat is {{ list1[1] }}

我可以在渲染模板之前将它们拆分开,但是由于有时在字符串中最多包含10个字符串,因此很混乱。

在执行操作之前,我有一个jsp:

<% String[] list1 = val.get("variable1").split(";");%>    
The grass is <%= list1[0] %> and the boat is <%= list1[1] %>

编辑:

它适用于:

{% set list1 = variable1.split(';') %}
The grass is {{ list1[0] }} and the boat is {{ list1[1] }}

您是否可以在将字符串发送到模板之前先进行拆分?
kylieCatt 2015年

@IanAuld是的,我可以,但是就像我说的那样,它变得凌乱,因为它包含很多字符串,并且它们都包含很多字符串。
user3605780

1
您可以编写自己的过滤器以对喜欢的任何字符进行拆分。见stackoverflow.com/questions/20678004/...
junnytony

Answers:


126

五年后回到我自己的问题之后,看到很多人发现此功能有用,做了一些更新。

可以list使用split函数将字符串变量拆分为a (它可以包含相似的值,set用于赋值)。我尚未在官方文档中找到此功能,但其功能与普通Python类似。这些项目可以通过索引来调用,可以在循环中使用,或者像Dave建议的那样(如果您知道值),它可以像元组一样设置变量。

{% set list1 = variable1.split(';') %}
The grass is {{ list1[0] }} and the boat is {{ list1[1] }}

要么

{% set list1 = variable1.split(';') %}
{% for item in list1 %}
    <p>{{ item }}<p/>
{% endfor %} 

要么

{% set item1, item2 = variable1.split(';') %}
The grass is {{ item1 }} and the boat is {{ item2 }}

10
Jinja2还将分配扩展元组样式ala {% set list1,list2 = variable1.split(';') %}
戴夫

这是列表还是集合?因为在set中,它将遵循set而不是列表的属性。
as2d3

1
@AbhishekAgrawal传递到模板中的值是用分号分隔的字符串。
user3605780

是的,但是我们创建了list1,那么它是列表还是集合?
as2d3

1
@AbhishekAgrawal我认为split函数会创建列表。“集合”来自设置变量而不是数据集。但是我不确定它是列表还是集合,但是您可以使用{{list1 [0]}}来获取数据。
user3605780

16

如果最多有10个字符串,则应使用列表来迭代所有值。

{% set list1 = variable1.split(';') %}
{% for list in list1 %}
<p>{{ list }}</p>
{% endfor %}

11

您不能在Jinja中运行任意的Python代码;在这方面它不像JSP那样工作(它看起来很相似)。Jinja中的所有内容都是自定义语法。

出于您的目的,定义自定义过滤器最有意义,因此您可以例如执行以下操作:

The grass is {{ variable1 | splitpart(0, ',') }} and the boat is {{  splitpart(1, ',') }}
Or just:
The grass is {{ variable1 | splitpart(0) }} and the boat is {{  splitpart(1) }}

过滤器功能如下所示:

def splitpart (value, index, char = ','):
    return value.split(char)[index]

另一种可能更有意义的选择是在控制器中对其进行拆分,然后将拆分后的列表传递给视图。


2
我在哪里放置过滤器功能?
威廉·范·凯奇威奇'16

@WillemvanKetwich您是否阅读了我在答案中链接的有关自定义过滤器的文档?

3
我做到了-这就是为什么我问。我在Ansible的上下文中使用它,因此找到了一个更相关的答案。groups.google.com/forum/#!topic/ansible-project/A7fGX-7X-ks仍然感谢。:)
Willem van Ketwich '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.