gpt4 book ai didi

python - 在 Jinja2 的子模板中访问父循环范围

转载 作者:太空宇宙 更新时间:2023-11-03 15:42:44 24 4
gpt4 key购买 nike

父类.txt

{% for dict in list_of_dictionaries %}
{% block pick_dictionary_element %}
{% endblock %}
{% endfor %}

child_one.txt

{% extends "parent.txt" %}
{% block pick_dictionary_element %}
{{ dict.a }}
{% endblock %}

child_two.txt

{% extends "parent.txt" %}
{% block pick_dictionary_element %}
{{ dict.b }}
{% endblock %}

然后:

from jinja2 import Template, Environment, FileSystemLoader
e = Environment(loader=FileSystemLoader("./"))
e.get_template("child_one.txt").render(list_of_dictionaries=[{'a': 'a', 'b': 'b'}])

产生空输出。如何从父 for 循环访问 dict var?我有点想像 jinja 只是内联 pick_dictionary_element 并且子项具有其父项的 for 循环范围?

最佳答案

您要执行的操作的关键是使用 scoped您街区的关键字:

{# parent.txt #}
{% for dict in list_of_dictionaries %}
{% block pick_dictionary_element scoped %}
{% endblock %}
{% endfor %}

为什么这很难调试?

你在循环中错误地使用了名称 dict:

{% for dict in list_of_dictionaries %}

这样做的副作用是子模板不会轻易提示,因为符号 dict 存在于它的上下文中。相反,如果你做了类似的事情:

{# parent.txt #}
{% for a_dict in list_of_dictionaries %}
{% block pick_dictionary_element %}
{% endblock %}
{% endfor %}

{# child_one.txt #}
{% extends "parent.txt" %}
{% block pick_dictionary_element %}
{{ a_dict.a }}
{% endblock %}

你会被告知:

jinja2.exceptions.UndefinedError: 'a_dict' is undefined

关于python - 在 Jinja2 的子模板中访问父循环范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51698402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com