Python 如何直接从Flask render_模板使用Jinja2扩展

Python 如何直接从Flask render_模板使用Jinja2扩展,python,flask,jinja2,Python,Flask,Jinja2,我正在开发一个Flask应用程序,它工作得很好,直到我尝试向要呈现的模板添加以下行: {% do totals.update({tier: 0}) %} 用于呈现模板的当前代码使用Flask的render\u template(): 显而易见的修复方法是将jinja2.ext.do扩展添加到jinja。我已经能够直接使用Jinja2成功地做到这一点,具体如下: from jinja2 import Environment, PackageLoader ENV = Environment(loa

我正在开发一个Flask应用程序,它工作得很好,直到我尝试向要呈现的模板添加以下行:

{% do totals.update({tier: 0}) %}
用于呈现模板的当前代码使用Flask的
render\u template()

显而易见的修复方法是将
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\u template()
,而
render\u template()
在引擎盖下使用了Jinja2(据我所知),似乎应该可以让
render\u 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
扩展名


有什么建议吗?这可能吗?如果是,怎么做

自Flask v.1.1.0以来,您可以使用字典直接访问Flask加载的Jinja扩展。在您的情况下,只添加这一行就可以做到:

app=Flask(\uuuuu name\uuuuuu)
app.jinja_选项['extensions'].append('jinja2.ext.do'))

确保更新您的Flask(使用pip:
pip安装-U Flask
)。

自Flask v.1.1.0以来,您可以使用字典直接访问Flask加载的Jinja扩展。在您的情况下,只添加这一行就可以做到:

app=Flask(\uuuuu name\uuuuuu)
app.jinja_选项['extensions'].append('jinja2.ext.do'))

确保更新您的烧瓶(使用pip:
pip安装-U Flask
)。

事实上,我发现Zatiranyk列出的选项有时会坏掉(特别是当我尝试使用Flask SocketIO时)

app.jinja_options['extensions'].append('jinja2.ext.do')
我找到的解决方案是使用以下选项:

app.jinja_env.add_extension('jinja2.ext.do')

事实上,我发现Zatiranyk列出的选项有时会失效(特别是当我试图使用Flask SocketIO时)

app.jinja_options['extensions'].append('jinja2.ext.do')
我找到的解决方案是使用以下选项:

app.jinja_env.add_extension('jinja2.ext.do')