如何使用jinja2 API渲染块

时间:2014-01-14 19:50:39

标签: python jinja2

我想用jinja2编写自己的静态页面生成器。我想在特定的块中以编程方式呈现某些内容。我试过这个:

import jinja2

a = "adam"
b = "bob"

template = jinja2.Template(u"{{ A }} {% block b %}{% endblock %}")

html = template.render({'A': a, 'B': b})

print(html)

但返回以下输出:adam。如何在b块中渲染一些文本和/或变量(例如变量b)。

1 个答案:

答案 0 :(得分:3)

模板块仅用于模板继承。因此,例如,当您有第二个扩展前一个模板的模板时,您可以通过填充继承模板中的块来替换创建的块。

但是,在调用render()时,您传递的模板上下文仅定义模板内使用的变量。块无法通过模板填充,因此B不会出现。该块的内容仍然是空的,因此不会出现任何内容。

如果要显示变量内容,则必须像A一样指定变量。但是,您可以将两者结合起来并提供块B,其默认内容是变量输出。然后在继承的模板中,您仍然可以使用其他内容覆盖该块。

template = jinja2.Template(u"{{ A }} {% block B %}{{ B }}{% endblock %}")
template.render({'A': a, 'B': b})

顺便说一句:块和变量实际上可以共享相同的名称而不会相互冲突。