Рендеринг части шаблона в Flask

Каков правильный способ реализации следующих функций:

Представление веб-приложения (Flask) состоит из нескольких DIV, содержащих некоторый HTML-контент (т. е. списки элементов, извлеченных из базы данных). После загрузки представления в браузер содержимое DIV будет обновляться индивидуально, в зависимости от действий пользователя, с помощью запросов AJAX.

Я знаю, что в механизме шаблонов Jinja2 есть функция макросов, которая является частью микрофреймворка Flask. Возможно, есть способ отображать только определенный макрос, тогда я мог бы использовать его для обслуживания частичного содержимого.

Но опять же, возможно, это неправильный способ достижения этой функциональности, и есть более «правильный» способ.


person Passiday    schedule 02.02.2014    source источник
comment
Обычно вы извлекаете данные JSON, а затем обрабатываете их в HTML локально в браузере.   -  person David K. Hess    schedule 03.02.2014


Ответы (1)


В документации Flask есть пример, который делает именно то, что вы описываете:

Шаблон:

{% macro hello(name) %}Hello {{ name }}!{% endmacro %}

Вид:

hello = get_template_attribute('_cider.html', 'hello')
return hello('World')
person lanzz    schedule 02.02.2014
comment
Спасибо, это решение работает, но с одной оговоркой: если мой шаблон содержит ссылку на объект запроса, то получение атрибута шаблона невозможно. Это происходит даже в том случае, если требуемый макрос не содержит ссылок на глобальные объекты. Я не уверен, как это обойти. - person Passiday; 03.02.2014
comment
Да, весь шаблон должен успешно скомпилироваться. Вероятно, вам следует переместить свой макрос в отдельный файл шаблона, который затем можно будет импортировать в другие ваши шаблоны и получить доступ к представлениям через get_template_attribute. - person lanzz; 03.02.2014