在jinja2中,如何两次包含相同的模板,但要传递不同的变量

阿尔比

在jinja2中,我试图多次使用模板动态创建html文档。我的python脚本看起来像这样:

# In my python script
env = Environment()
env.loader = FileSystemLoader('.')
base_template = env.get_template('base_template.html')

# each has the actual content and its associated template 
content1 = ("Hello World", 'content_template.html') 
content2 = ("Foo bar", 'content_template.html')


html_to_present = [content1[1], content2[1]]

# and render. I know this is wrong 
# as I am not passing the actual content, 
# but this is the part I am struggling with. More below
base_template.render(include_these=html_to_present, ).encode("utf-8"))

我的基本模板如下所示:

#################
# base_template.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    {% for include_this in include_these %}
    {% include include_this %}
    {% endfor %}    
</body>
</html>

content_template.html看起来像这样

# content_template.html
<div>
    {{ content }}
</div>

现在我的问题是如何根据与它关联的值content在变量中动态设置变量content_template.html

马丁·彼得斯(Martijn Pieters)

使用Jinja2宏来参数化您的模板。

宏就像一个Python函数;您可以定义一个模板代码段,以及它所采用的参数,然后就可以像调用函数一样调用该宏。

我把宏连成一个宏模板,并导入该模板到您的基本模板。将要使用的宏的名称传递给基本模板:

# content and macro name
content1 = ("Hello World", 'content_template') 
content2 = ("Foo bar", 'content_template')

base_template.render(include_these=[content1, content2]).encode("utf-8"))

这也将macro上下文过滤器添加到环境中。

并在您的base_template.html

{% import "macros.html" as macros %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    {% for content, macroname in include_these %}
    {% macros[macroname](content) %}
    {% endfor %}
</body>
</html>

macros.html模板:

{% macro content_template(content) -%}
<div>
    {{ content }}
</div>
{%- endmacro %}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在jinja2中,如何两次包含相同的模板,但传递不同的变量

来自分类Dev

包含模板中的Jinja2变量

来自分类Dev

Ansible / Jinja2模板:for循环运行两次

来自分类Dev

如何填充存储在 Ansible 变量中的 Jinja2 模板?

来自分类Dev

在Jinja2中将变量从子模板传递给父模板

来自分类Dev

Jinja2嵌套循环模板,用于处理两个列表中的Ansible YAML变量

来自分类Dev

npm两次将相同的依赖项包含在不同版本中

来自分类Dev

如何在Jinja2模板中引用变量变量

来自分类Dev

在模板中访问jinja2全局变量

来自分类Dev

使用url作为我的jinja2模板中的变量?

来自分类Dev

在Jinja2模板中调用构造的变量名称?

来自分类Dev

jinja2模板中未定义变量时如何删除行

来自分类Dev

如何在Jinja2模板中为变量指定列?

来自分类Dev

如何检查jinja2 / django模板中任何变量的大小写?

来自分类Dev

在actioncontroller中Extbase addAdditionalHeaderData(...),两次包含相同的CSS

来自分类Dev

如何检查字符串在PHP中是否连续两次包含相同字母?

来自分类Dev

如何在python sqlite3嵌套查询中两次传递相同的参数?

来自分类Dev

jinja2 烧瓶:在迭代时使用 rowspan 两次

来自分类Dev

更新Jinja2模板变量

来自分类Dev

不能在Angular 2的单个HTML标签中两次使用相同的变量?

来自分类Dev

在 Bash 中两次传递变量

来自分类Dev

如何使用Jinja2模板在烧瓶中解码

来自分类Dev

如何在Jinja2模板中修改SelectField宽度

来自分类Dev

如何在jinja2模板中构建此循环

来自分类Dev

如何迭代jinja2模板中的此属性?

来自分类Dev

如何在jinja2模板中构建此循环

来自分类Dev

如何从 jinja2 模板中获取单个值?

来自分类Dev

有两次相同的变量

来自分类Dev

不能两次读取相同的变量

Related 相关文章

  1. 1

    在jinja2中,如何两次包含相同的模板,但传递不同的变量

  2. 2

    包含模板中的Jinja2变量

  3. 3

    Ansible / Jinja2模板:for循环运行两次

  4. 4

    如何填充存储在 Ansible 变量中的 Jinja2 模板?

  5. 5

    在Jinja2中将变量从子模板传递给父模板

  6. 6

    Jinja2嵌套循环模板,用于处理两个列表中的Ansible YAML变量

  7. 7

    npm两次将相同的依赖项包含在不同版本中

  8. 8

    如何在Jinja2模板中引用变量变量

  9. 9

    在模板中访问jinja2全局变量

  10. 10

    使用url作为我的jinja2模板中的变量?

  11. 11

    在Jinja2模板中调用构造的变量名称?

  12. 12

    jinja2模板中未定义变量时如何删除行

  13. 13

    如何在Jinja2模板中为变量指定列?

  14. 14

    如何检查jinja2 / django模板中任何变量的大小写?

  15. 15

    在actioncontroller中Extbase addAdditionalHeaderData(...),两次包含相同的CSS

  16. 16

    如何检查字符串在PHP中是否连续两次包含相同字母?

  17. 17

    如何在python sqlite3嵌套查询中两次传递相同的参数?

  18. 18

    jinja2 烧瓶:在迭代时使用 rowspan 两次

  19. 19

    更新Jinja2模板变量

  20. 20

    不能在Angular 2的单个HTML标签中两次使用相同的变量?

  21. 21

    在 Bash 中两次传递变量

  22. 22

    如何使用Jinja2模板在烧瓶中解码

  23. 23

    如何在Jinja2模板中修改SelectField宽度

  24. 24

    如何在jinja2模板中构建此循环

  25. 25

    如何迭代jinja2模板中的此属性?

  26. 26

    如何在jinja2模板中构建此循环

  27. 27

    如何从 jinja2 模板中获取单个值?

  28. 28

    有两次相同的变量

  29. 29

    不能两次读取相同的变量

热门标签

归档