Я работаю над приложением Flask, которое работает нормально, пока я не попытаюсь добавить следующую строку в шаблон для визуализации:
{% do totals.update({tier: 0}) %}
Текущий код для рендеринга шаблона использует Flask'srender_template()
:
from flask import Flask, Response, request, session
from flask import render_template
app = Flask(__name__)
..
return render_template(<template.htlm>,...)
Это происходит со следующей ошибкой:
TemplateSyntaxError: Encountered unknown tag 'do'. Jinja was looking for the following tags: 'endfor' or 'else'. The innermost block that needs to be closed is 'for'.
Очевидным решением является добавление расширения jinja2.ext.do
к jinja.Я смог сделать это успешно, используя Jinja2 напрямую, в соответствии с:
from jinja2 import Environment, PackageLoader
ENV = Environment(loader=PackageLoader('ticket_app', 'templates'), extensions=['jinja2.ext.do'])
...
TEMP = ENV.get_template('div_' + div_id + '.html')
return TEMP.render(sales_new=sales_new, event_config=event_config)
Однако я бы предпочел не использовать Jinja2 напрямую ... До этого приложение использовало только Flask и render_template()
, ипоскольку render_template()
использует Jinja2 под капотом (насколько я понимаю), кажется, что render_template()
должно быть возможно, чтобы понять расширение jinja2.ext.do
(или любое другое расширение в этом отношении).
Пока что я пробовал следующее:
app = Flask(__name__)
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.config['EXPLAIN_TEMPLATE_LOADING'] = True
env = app.jinja_env
env.add_extension('jinja2.ext.do')
Хотя вышеприведенное не выдает ошибку, оно также не заставляет render_template()
понять jinja2.ext.do
расширение.
Есть предложения?Это должно быть возможно?Если да, то как?