使用Django ListView创建导航树

时间:2018-05-25 04:28:45

标签: python django django-templates django-views django-generic-views

我正在为django项目进行导航工作,无法解决这个问题。我从单个ListView类返回上下文,但我想按类别排列返回的查询集。

如果我在同一个模型中有多个类别,我如何拆分返回的视图对象,以便在页面上单独显示它们?

我尝试在 views.py

中使用它
class ServiceView(ListView):
    model = Service
    template_name = "services/services.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['health'] = Service.objects.all().filter(service_type__icontains='health')
        context['life'] = Service.objects.all().filter(service_type__icontains='life')
        return context

我的印象是我可以从模板中调用修改后的上下文,但我只能调用一个上下文。是否可以从单个模型创建多个上下文?

我尝试使用类似以下 services.html

的模板
<ul class="sidebar-nav animated fadeIn">
    <li>
        <a data-toggle="collapse" href="#coll-css" class="collapsed"><i class="fa fa-heart"></i> Health</a>
        <ul id="coll-css" class="menu-submenu list-unstyled collapse">
            {% for service in health %}
                    <li><a href="{% url 'services' %}{{ service.slug }}"><i class="fa {{ service.icon }}"></i>{{ service.title }}</a></li>
            {% endfor %}
        </ul>

        <a data-toggle="collapse" href="#coll-css" class="collapsed"><i class="fa fa-heart"></i> Life</a>
        <ul id="coll-css" class="menu-submenu list-unstyled collapse">
            {% for service in life %}
                    <li><a href="{% url 'services' %}{{ service.slug }}"><i class="fa {{ service.icon }}"></i>{{ service.title }}</a></li>
            {% endfor %}
        </ul>
    </li>
</ul>

填充“健康”上下文中的项目,但不填充生活上下文。是否可以在模板中使用2 for循环?有没有更好的方法来实现这一目标?

0 个答案:

没有答案