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

Python 在jinja中将字符串拆分为列表?,python,jinja2,Python,Jinja2,我在jinja2模板中有一些变量,它们是由“;”分隔的字符串 我需要在代码中分别使用这些字符串。 i、 e.变量为variable1=“绿色;蓝色” 我可以在呈现模板之前将其拆分,但由于有时字符串中最多有10个字符串,因此会变得很混乱 我以前有一个jsp,在那里我做了: <% String[] list1 = val.get("variable1").split(";");%> The grass is <%= list1[0] %> and the boat i

我在jinja2模板中有一些变量,它们是由“;”分隔的字符串

我需要在代码中分别使用这些字符串。 i、 e.变量为variable1=“绿色;蓝色”

我可以在呈现模板之前将其拆分,但由于有时字符串中最多有10个字符串,因此会变得很混乱

我以前有一个jsp,在那里我做了:

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

不能在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]

另一种可能更有意义的方法是在控制器中拆分它,并将拆分后的列表传递给视图。

在5年后回到我自己的问题,看到这么多人发现这个有用的小更新

可以使用split函数将字符串变量拆分为
列表
(它可以包含类似的值,
set
用于)。我在官方文档中没有找到这个函数,但它的工作原理与普通Python类似。这些项可以通过索引调用,在循环中使用,或者像Dave建议的那样。如果您知道这些值,它可以设置元组之类的变量

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


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

{% set list1 = variable1.split(';') %}
{% for list in list1 %}
<p>{{ list }}</p>
{% endfor %}
{%set list1=variable1.split(“;”)%}
{list1%中列表的%s}
{{list}}

{%endfor%}
在将字符串发送到模板之前,您可以拆分字符串吗?@I可以,但正如我所说的,它会变得混乱,因为它有很多字符串,而且其中都包含很多字符串。您可以编写自己的筛选器,对您喜欢的任何字符进行拆分。参见Jinja2还将分配扩展元组样式ala
{%set list1,list2=variable1.split(“;”)%}
。这是列表还是集合?因为在集合中,它将遵循集合的属性,而不是列表。@AbhishekAgrawal传递到模板中的值是一个分号分隔的字符串。是的,但是我们创建了列表1,那么它是列表还是集合?@AbhishekAgrawal我想拆分函数会创建列表。“set”来自设置变量而不是数据集。但是我不确定它是列表还是集合,但是你可以通过{{list1[0]}访问你的数据。我把过滤函数放在哪里?@WillemvanKetwich你读过我在回答中链接的关于自定义过滤器的文档了吗?我读过了,这就是我问的原因。我在Ansible的上下文中使用了这个,因此找到了一个更相关的答案。无论如何,谢谢。:)
{% 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 }}
{% set list1 = variable1.split(';') %}
{% for list in list1 %}
<p>{{ list }}</p>
{% endfor %}