如何使用 django 模板递归提取分层字典?
How can I recursively extract a hierarchical dictionary using a django template?
我有层级结构:
{
"content": "Header 1",
"name": "folder/name.txt",
"decendent": [
{
"content": "Header 2",
"name": "folder/subfolder/name.txt",
"decendent": null
},
{
"content": "Header 3",
"name": "folder/subfolder2/name.txt",
"decendent": [
{
"content": "Header 4",
"name": "folder/subfolder2/subsubfolder1/name.txt",
"decendent": null
}
... etc.
]
}
]
}
我必须使用(作为示例)此模板展开它:
{% for key, value in list.items %}
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand">
</div>
<div class="Content">
<a href="/help/pur/">
{{ key }}
</a>
</div>
{% for k, v in value.items %}
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand">
</div>
<div class="Content">
<a href="/help/test/">
{{ k }}
</a>
</div>
{% for k1, v1 in v.items %}
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand">
</div>
<div class="Content">
<a href="/help/test/">
{{ k1 }}
</a>
</div>
{% for k2, v2 in v1.items %}
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand">
</div>
<div class="Content">
<a href="#" onclick="k2 = '{{ k2 }}'; changeText(k2)">
{{ k2 }}
</a>
</div>
</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
我必须将 "name" 属性放入 "a href" 标签,并在开始和结束标签之间提取 "content",对于节点的后代,我想通过它们递归地。不幸的是,考虑到它的局限性,我不知道如何使用 django 模板语言来执行它。
你能帮帮我吗?
Django 可以使用递归模板。如果您创建一个名为(例如)recurse.html
的模板,并通过您的顶级字典向它传递一个 data
变量:
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand"></div>
<div class="Content">
<a href="{{data.name}}">
{{data.content}}
</a>
</div>
{% for item in data.decendent %}
{% include 'recurse.html' with data=item %}
{% endfor %}
</li>
</ul>
应该在第一层显示,然后每次都重新调用自己,因为它 decendents
并且 data
重新绑定到新的子树。
我宁愿为 Jinja2 模板创建一个新标签。
Django-doc reference
我有层级结构:
{
"content": "Header 1",
"name": "folder/name.txt",
"decendent": [
{
"content": "Header 2",
"name": "folder/subfolder/name.txt",
"decendent": null
},
{
"content": "Header 3",
"name": "folder/subfolder2/name.txt",
"decendent": [
{
"content": "Header 4",
"name": "folder/subfolder2/subsubfolder1/name.txt",
"decendent": null
}
... etc.
]
}
]
}
我必须使用(作为示例)此模板展开它:
{% for key, value in list.items %}
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand">
</div>
<div class="Content">
<a href="/help/pur/">
{{ key }}
</a>
</div>
{% for k, v in value.items %}
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand">
</div>
<div class="Content">
<a href="/help/test/">
{{ k }}
</a>
</div>
{% for k1, v1 in v.items %}
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand">
</div>
<div class="Content">
<a href="/help/test/">
{{ k1 }}
</a>
</div>
{% for k2, v2 in v1.items %}
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand">
</div>
<div class="Content">
<a href="#" onclick="k2 = '{{ k2 }}'; changeText(k2)">
{{ k2 }}
</a>
</div>
</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
我必须将 "name" 属性放入 "a href" 标签,并在开始和结束标签之间提取 "content",对于节点的后代,我想通过它们递归地。不幸的是,考虑到它的局限性,我不知道如何使用 django 模板语言来执行它。
你能帮帮我吗?
Django 可以使用递归模板。如果您创建一个名为(例如)recurse.html
的模板,并通过您的顶级字典向它传递一个 data
变量:
<ul class="Container">
<li class="Node ExpandClosed">
<div class="Expand"></div>
<div class="Content">
<a href="{{data.name}}">
{{data.content}}
</a>
</div>
{% for item in data.decendent %}
{% include 'recurse.html' with data=item %}
{% endfor %}
</li>
</ul>
应该在第一层显示,然后每次都重新调用自己,因为它 decendents
并且 data
重新绑定到新的子树。
我宁愿为 Jinja2 模板创建一个新标签。 Django-doc reference