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

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

我需要在代码中分别使用这些字符串。 也就是说,变量是 variable1 = “绿色; 蓝色”

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

I can split them up before rendering the template but since it are sometimes up to 10 strings inside the string this gets messy.

之前我有一个 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] }}
202407 次浏览

You can’t run arbitrary Python code in jinja; it doesn’t work like JSP in that regard (it just looks similar). All the things in jinja are custom syntax.

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

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年后回到我自己的问题,看到这么多人发现这个有用,一个小更新。

字符串变量可以通过使用拆分函数拆分为 list(它可以包含类似的值,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个字符串,那么您应该使用一个列表来遍历所有值。

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