Функция stream_template
Функция stream_template применяется для
потоковой отдачи шаблона. В отличие от
render_template, она не собирает весь
HTML в одну строку, а возвращает генератор,
который отдаёт части шаблона по мере их
формирования. Первым параметром передаётся
имя шаблона, далее - контекстные переменные
в виде именованных аргументов. Это удобно для
больших страниц: браузер получает первые
фрагменты, пока остальная часть ещё
вычисляется.
Синтаксис
stream_template(template_name_or_list, **context)
Пример
Давайте отдадим шаблон потоково через обработчик Flask:
from flask import Flask, stream_template
app = Flask(__name__)
@app.route('/')
def index():
return stream_template('index.html', text='abcde')
Сам шаблон может быть обычным:
<p>{{ text }}</p>
Результат выполнения кода:
<p>abcde</p>
Пример
Потоковость особенно заметна, когда шаблон отдаёт данные по частям в цикле:
from flask import Flask, stream_template
app = Flask(__name__)
@app.route('/')
def index():
return stream_template('list.html', arr=['a', 'b', 'c', 'd', 'e'])
В шаблоне переберём массив:
{% for elem in arr %}
<p>{{ elem }}</p>
{% endfor %}
Результат выполнения кода:
<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
<p>e</p>
Пример
Функция возвращает генератор, поэтому его можно обернуть в свой потоковый ответ:
from flask import Flask, stream_template
app = Flask(__name__)
@app.route('/')
def index():
gen = stream_template('index.html', text='hello')
return app.response_class(gen, mimetype='text/html')
Результат выполнения кода:
<p>hello</p>
Смотрите также
-
функцию
render_template,
которая рендерит шаблон целиком -
функцию
stream_template_string,
которая потоково рендерит шаблон из строки -
функцию
render_template_string,
которая рендерит шаблон из строки целиком -
тег
for,
который перебирает элементы в шаблоне