首页 > 解决方案 > 使用页面上下文从字符串渲染 jinja2 模板

问题描述

基本上,我想创建编辑器,您可以在其中使用 jinja2 语法编辑页面的一部分。在编辑器中,如果您按Preview,我希望能够看到页面中包含的渲染模板,但包含页面本身具有的所有变量和自定义过滤器。我目前的代码是:

Python

from flask import render_template
from jinja2 import Template

# (... route logic here ...)
return render_template('preview.html',
   title='Some title',
   preview=Template("This is {{ title }}.")

神社2

{{ title }}
{{ preview.render() }}

但输出是:

Some title
This is .

是否可以从带有页面上下文的字符串呈现我的模板,输出将是这样的?

Some title
This is Some title.

标签: pythonflaskjinja2

解决方案


更新

如果你想渲染一个子模板并从父模板继承上下文,那么你可以使用include,它通常与模板路径一起使用(例如,{% include 'template.html' %}但也适用于Template对象:

{{ title }}
{% include preview %}

原始答案

您需要将上下文传递给第一个模板中的 preview.render() 。尝试这个:

{{ title }}
{{ preview.render(title=title) }}

推荐阅读