Подтвердить что ты не робот

Разделить строку на список в jinja?

У меня есть некоторые переменные в шаблоне jinja2, которые являются строками, разделенными символом ';'.

Мне нужно использовать эти строки отдельно в коде. то есть переменная variable1 = "зеленый, синий"

{% 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] %>

EDIT:

Он работает с:

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

Ответ 1

Он работает с:

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

Ответ 2

Если имеется до 10 строк, вы должны использовать список, чтобы перебирать все значения.

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

Ответ 3

Вы не можете запустить произвольный код Python в jinja; он не работает, как 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]

Альтернативой, которая может иметь еще больший смысл, было бы разделение ее на контроллере и передача разделенного списка в представление.