如何在不使用 Jinja 中的上下文变量渲染的情况下获取模板纯文本 html?

How to get template plain html without rendering with context vars in Jinja?

我有一组模板,可以导入和扩展父模板,我想要使用这些导入和扩展渲染模板,但不渲染 jinja 的上下文变量。 Jinja 是否支持使用排除或导入块进行部分渲染? 是否可以不渲染上下文变量并获取模板?

使用 Tornado,您只需读取模板并将它们写入响应即可。如果您不想渲染它们,请不要使用 render 函数。

示例:

class MyHandler(web.RequestHandler):
    def get(self):
        with open('/path/to/template.html') as f:
            self.write(f.read())

另一种解法:

Jinja2 Environment class 允许您自定义用于上下文变量的括号。这意味着,您可以将这些括号 - {{ ... }} 设置为其他一些字符,如 - [[ ... ]],Jinja2 将不会渲染旧括号。因此,Jinja 不会将这些 {{ }} 视为特殊字符,并且会像任何其他字符一样输出它们。

这是一个简单的例子:

from jinja2 import Environment

env = Environment(
    ... other usual options ...
    variable_start_string='[[',
    variable_end_string=']]'
)

然后使用此 env 呈现您的模板。所有带大括号的变量 - {{ ... }} 都不会被渲染,但其他扩展模板也将被包含。