繁体   English   中英

如何使用jinja2 API渲染块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM