【发布时间】:2019-03-12 00:14:36
【问题描述】:
我正在开发一个运行良好的 Flask 应用程序,直到我尝试将以下行添加到要呈现的模板中:
{% do totals.update({tier: 0}) %}
目前渲染模板的代码使用的是Flask的render_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 扩展。
有什么建议吗?这应该可能吗?如果是这样,怎么做?
【问题讨论】: