Jinja2的generate()返回整个rst模板
我正在尝试创建一个restructuredText文档(我会用rst2pdf
来处理),并使用Jinja2来填充其中的值。文档中的一些要点需要根据外部因素来决定是否包含,所以当我发现Jinja2有一个[generate()][1]
函数可以生成一个生成器时,我觉得这正好适合这个任务。
不过,使用后我发现生成器里只有整个rst模板(已经填入值),而不是我希望的按行分开的内容。而且,我在链接的文档之外找不到关于generate()
的更多信息,所以我不太确定需要修复哪个方面。
这是我的代码:
doc_info = {"name": "Kaladin",
"address": "Shattered Plains",}
env = Environment(loader=PackageLoader('src', 'templates'))
template = env.get_template("Example.rst")
template_gen = template.generate(doc_info)
print template_gen.next() # Would be looped if it worked as expected
示例.rst:
.. header::
+--------------------------------------------------------+
|.. class:: center |
| |
|**User Info** |
+------------------+-------------------------------------+
|.. class:: right |.. class:: left |
| | |
|Name: |{{ name }} |
+------------------+-------------------------------------+
|.. class:: right |.. class:: left |
| | |
|Address: |{{ address }} |
+------------------+-------------------------------------+
{{ name }} lives in {{ address }}
注意:在这个例子中,由于name
和address
的长度不同,表格会出现错位,但在我的实际代码中我会调整空格,所以这不是问题。
顺便说一下,使用render()
的效果正如我所期待的,只是generate()
没有给我预期的结果。
有没有办法指示我希望生成器的项目按行分开?还是我做错了什么?如果我使用不当,或者有更好的方法,我也很乐意接受。
1 个回答
3
虽然我来得有点晚(四年了!),但看起来 generate()
这个函数可以在循环和条件判断中使用,而你的模板里没有这些东西。
要决定输出中包含什么,可以使用 {% if <external.factor> %}
,并把外部因素传递给 generate(或者也许是 render()
-- 不太清楚这个应用是否需要 generate()
)。