Функция namespace
Функция namespace применяется внутри Jinja-шаблонов
и создаёт объект-контейнер для именованных значений.
Первым параметром передаются значения через именованные
аргументы, которые становятся атрибутами объекта.
В отличие от обычного словаря, атрибуты объекта
namespace можно изменять прямо в шаблоне,
и эти изменения сохраняются между итерациями циклов.
Синтаксис
{% set obj = namespace(name=value, ...) %}
Пример
Давайте создадим объект с атрибутом count
и увеличим его в цикле:
{% set res = namespace(count=0) %}
{% for elem in ['a', 'b', 'c', 'd', 'e'] %}
{% set res.count = res.count + 1 %}
{% endfor %}
<p>{{ res.count }}</p>
Результат выполнения кода:
<p>5</p>
Пример
Давайте соберём строку из элементов массива
с помощью объекта namespace:
{% set res = namespace(text='') %}
{% for elem in ['a', 'b', 'c', 'd', 'e'] %}
{% set res.text = res.text + elem %}
{% endfor %}
<p>{{ res.text }}</p>
Результат выполнения кода:
<p>abcde</p>
Пример
Давайте передадим объект namespace
из обработчика Flask в шаблон:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
Теперь используем функцию namespace в шаблоне:
{% set res = namespace(total=0) %}
{% for elem in [1, 2, 3, 4, 5] %}
{% set res.total = res.total + elem %}
{% endfor %}
<p>{{ res.total }}</p>
Результат выполнения кода:
<p>15</p>
Смотрите также
-
тег
set,
который создаёт переменную в шаблоне -
тег
for,
который перебирает элементы последовательности -
тег
macro,
который создаёт переиспользуемый блок шаблона -
функцию
render_template,
которая рендерит Jinja-шаблон