如何使用django-treebeard构建站点地图?

时间:2017-03-29 22:00:58

标签: python django django-treebeard

我已经设置了一个django-treebeard模型,它有子节点,但没有。我现在如何在我的模板中显示这个?这是我到目前为止所做的。

我的模特:

class SiteMapEntry(MP_Node):
    name = models.CharField(max_length=100, null=False, blank=False)
    url = models.CharField(max_length=1000, null=False, blank=False)

    node_order_by = ['name']

    class Meta:
        verbose_name = "Sitemap Entry"
        verbose_name_plural = "Sitemap Entries"

    def __unicode__(self):
        return ('%s - %s' % (self.name, self.url))

我的观点:

from django.views.generic import ListView
    class SiteMap(ListView):
        model = SiteMapEntry
        template_name = 'sitemaps.html'

我的模板:

{% block content %}
    <h1>Sitemap</h1>

    <br /><br />

    {% for url in object_list %}
<p>{{ url.name }}</p>
<p>{{ url.url }}</p>
    {% endfor %}

{% endblock content %}

现在这样做,显然只是在没有任何缩进的情况下列出节点及其子节点。如何在模板中将其列为树?

1 个答案:

答案 0 :(得分:1)

您可以使用get_annotated_list节点方法获取可在模板中迭代的数据结构:

http://django-treebeard.readthedocs.io/en/stable/api.html#treebeard.models.Node.get_annotated_list

还有一个例子可以告诉你如何做到这一点:

{% for item, info in annotated_list %}
    {% if info.open %}
        <ul><li>
    {% else %}
        </li><li>
    {% endif %}    

    {{ item }}    

    {% for close in info.close %}
        </li></ul>
    {% endfor %}
{% endfor %}

查看同样返回嵌套数据结构的dump_bulk方法:

http://django-treebeard.readthedocs.io/en/stable/api.html#treebeard.models.Node.dump_bulk

希望它有用。