将Jinja2模板渲染为具有布局的字符串

时间:2018-09-12 18:32:50

标签: python jinja2

是否可以从字符串返回jinja2模板到具有布局的字符串? 我知道这样可能:

from jinja2 import Template

html = "{{var}}"
t = Template(html)
print t.render(var="X")

但是我需要使用像这样扩展的jinja模板

layout = "HEY {%block content%}{%endblock%}"
html = "{%block content%}{{var1}}{%endblock%}"
t = Template(html, layout=layout)

当然layout = layout不起作用-这就是我要寻找的

谢谢

1 个答案:

答案 0 :(得分:0)

扩展是由加载程序而不是模板处理的,因此您需要一个加载程序。这样的事情怎么样?

from jinja2 import DictLoader, Environment, Template

def render_with_layout(template_string, layout, **kwargs):
    loader = DictLoader({
        'layout': layout,  # wrap in Template() if necessary
        'template': Template('{% extends "layout" %}' + template_string),
    })
    env = Environment(loader=loader)
    return env.get_template('template').render(**kwargs)