Как использовать расширение Jinja2 напрямую из Flask render_template - PullRequest
0 голосов
/ 07 октября 2018

Я работаю над приложением 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расширение.

Есть предложения?Это должно быть возможно?Если да, то как?

1 Ответ

0 голосов
/ 02 августа 2019

Начиная с Flask v.1.1.0, вы можете напрямую получить доступ к расширениям Jinja, загруженным Flask, со словарем Flask.jinja_options .В вашем случае добавление только этой строки должно помочь:

app = Flask(__name__)
app.jinja_options['extensions'].append('jinja2.ext.do')

Убедитесь, что вы обновили свою колбу (используя pip: pip install -U Flask).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...