我正在尝试使用django
来生成xml文件。
以下是我收到的数据清单:
PAGE PARENT TAG
1 parenttagA tag1
1 parenttagA tag2
1 parenttagB tag3
1 parenttagB tag4
2 parenttagC tag5
2 parenttagC tag6...
...我想制作一个xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<TAGS>
<PAGE page="1">
<PARENT parent="parenttagA">
<TAG>tag1</TAG>
<TAG>tag2</TAG>
</PARENT>
<PARENT parent="parenttagB">
<TAG>tag3</TAG>
<TAG>tag4</TAG>
</PARENT>
</PAGE>
<PAGE page="2">
<PARENT parent="parenttagC">
<TAG>tag5</TAG>
<TAG>tag6</TAG>...
</TAGS>
我通过for
标记攻击了这个问题,但我无法弄清楚,因为标签是嵌套的,“PAGE”和“PARENT”标签不能重复写入。我还尝试使用if
和ifchanged
标记的组合来解决此问题。虽然这让我接近我的期望,但是当forloop.counter为2时,不知怎的ifchanged
总是触发。另外我认为可能有更容易解决的问题,我不知道。
如果对此问题有合理的解决方案,请帮助我。
我凌乱的代码:
{% for data in datas %}
{% if forloop.counter == 1 %}
<PAGE page="{{data.pagenum}}">
<PARENT parent="{{data.parenttag}}">
<TAG>{{ data.tag }}</TAG>
{% else %}
{% if forloop.revcounter == 1 %}
<TAG>{{ data.tag }}</TAG>
</PARENT>
</PAGE>
{% else %}
{% ifchanged data.pagenum %}
</PAGE>
<PAGE page="{{data.pagenum}}">
<PARENT parent="{{data.parenttag}}">
<TAG>{{ data.tag }}</TAG>
{% else %}
{% ifchanged data.parenttag %}
</PARENT>
<PARENT parent="{{data.parenttag}}">
{% endifchanged %}
<TAG>{{ data.tag }}</TAG>
{% endifchanged %}
{% endif %}
{% endif %}
{% endfor %}
答案 0 :(得分:1)
通过对父母进行分组或实施更高级的解决方案(例如Can I use XSLT in Django?
),让您的数据结构更好地为渲染做好准备答案 1 :(得分:0)
我弄明白了!
所以regroup
可以嵌套,我的代码看起来像这样:
{% regroup datas by pagenum as pagenum_list %}
{% for pagenum in pagenum_list %}
<TAGS>
<PAGE page="{{pagenum.grouper}}">
{% regroup pagenum.list by parenttag as parenttag_list %}
{% for parenttag in parenttag_list %}
<PARENT parent="{{parenttag.grouper}}">
{% regroup parenttag.list by tag as tag_list %}
{% for tag in tag_list %}
<TAG>{{tag.grouper}}</TAG>
{% endfor %}
</PARENT>
{% endfor %}
</PAGE>
</TAGS>
{% endfor %}