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

Jinja2 Разделить строку пробелами

Я использую Jinja2 template engine (+ pelican).

У меня есть строка с надписью "1", и я ищу способ разделить эту строку на две используя пробел как разделитель.

Итак, конечный результат, который я ищу, - это переменная, которая содержит два значения в форме массива. например str [0] оценивается как "a", а str [1] оценивается как "1".

Спасибо заранее.

4b9b3361

Ответ 1

У меня была такая же проблема и не нашел ничего полезного, поэтому я просто создал собственный фильтр:

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

Ответ 2

Вызов разделения на строку должен сделать трюк:

"a 1".split()

Ответ 3

мое решение проверено в iPython

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

Ответ 4

Я сделал небольшой плагин, который делает то же самое, что и Loïc, но он необязательно указывает разделитель. https://github.com/timraasveld/ansible-string-split-filter

Он позволяет вам ввести:

# my_variable = 'a 1`
{ my_variable | split | join(' and ') } #=> a and 1

Ответ 5

Я предлагаю использовать что-то вроде:

str = "a 1 b 2 c 3"
val = atr.split()

Кроме того, если вы хотите указать конкретную позицию, вы можете использовать что-то вроде:

val1 = atr.split()[2]

Это будет значение второго значения в val1.

Ответ 6

Вы также можете сделать это с помощью декоратора:

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