使用django创建嵌套结构xml

时间:2014-02-14 00:36:16

标签: xml django google-app-engine django-templates

我正在尝试使用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”标签不能重复写入。我还尝试使用ififchanged标记的组合来解决此问题。虽然这让我接近我的期望,但是当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 %}

2 个答案:

答案 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 %}