Как использовать 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 ответ

Решение

Вы можете использовать get_annotated_list метод узла, чтобы получить структуру данных, которую вы можете использовать в шаблоне:

http://django-treebeard.readthedocs.io/en/stable/api.html

Там также есть пример, который показывает вам, как это сделать:

{% 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

Надеюсь, это полезно.

Другие вопросы по тегам