gpt4 book ai didi

python - 我在我的代码中使用了 Jinja2 "recursive"标签,但是我怎样才能得到当前循环的深度呢?

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:16 25 4
gpt4 key购买 nike

我使用标签“recursive”作为文档:

<ul class="sitemap">
{%- for item in sitemap recursive %}
<li><a href="{{ item.href|e }}">{{ item.title }}</a>
{%- if item.children -%}
<ul class="submenu">{{ loop(item.children) }}</ul>
{%- endif %}</li>
{%- endfor %}
</ul>

但我想知道当前循环的深度和父循环索引。我怎样才能得到它?

最佳答案

尝试一个 loop.index 值数组,其中父索引在每次调用 loop() 之前保存并在之后立即弹出。要在不呈现文本的情况下修改数组,请启用 {% do ... %} 语句。

例子:

template = """
{%- set idxs = [0] -%}
{%- for item in sitemap recursive %}
depth={{idxs|length}}. idx={{loop.index}}. pidx={{idxs[-1]}}. title={{item.title}}
{%- if item.children -%}
{%- do idxs.append(loop.index) -%}
{{ loop(item.children) }}
{%- do idxs.pop() -%}
{%- endif %}
{%- endfor %}
"""

class Node():
def __init__(self, title, children=[]):
self.title = title
self.children = children

sitemap = [
Node('a', [
Node('a_a', [
Node('a_a_a'),
]),
Node('a_b', [
Node('a_b_a', [
Node('a_b_a_0'),
]),
]),
]),
Node('b'),
]

env = jinja2.Environment(extensions=['jinja2.ext.do'])
print env.from_string(template).render(sitemap=sitemap)

这个程序打印:

    depth=1. idx=1. pidx=0. title=a
depth=2. idx=1. pidx=1. title=a_a
depth=3. idx=1. pidx=1. title=a_a_a
depth=2. idx=2. pidx=1. title=a_b
depth=3. idx=1. pidx=2. title=a_b_a
depth=4. idx=1. pidx=1. title=a_b_a_0
depth=1. idx=2. pidx=0. title=b

关于python - 我在我的代码中使用了 Jinja2 "recursive"标签,但是我怎样才能得到当前循环的深度呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401912/

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