[英]How to render block using jinja2 API
我想用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
)。
模板块仅用于模板继承。 因此,例如,当您有一个扩展前一个模板的第二个模板时,可以通过在继承的模板中填充该块,用其他东西替换创建的块。
但是,在调用render()
,您传递的模板上下文仅定义在模板内部使用的变量 。 模板无法填充图块,因此您的B
不会仅显示。 该块的内容仍然为空,因此将不会显示任何内容。
如果要显示变量内容,则必须像对A
一样指定一个变量。 但是,您可以将两者结合起来,并为块B
提供默认内容作为变量输出。 然后,在继承的模板中,您仍然可以用其他内容覆盖该块。
template = jinja2.Template(u"{{ A }} {% block B %}{{ B }}{% endblock %}")
template.render({'A': a, 'B': b})
顺便说一句:块和变量实际上可以共享相同的名称,而不会互相冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.