在按原点分组的模板中呈现外键

时间:2011-06-17 16:32:20

标签: django

我有一个Area模型,我有服务模型。区域是服务的外键。

我想要一个模板,显示在各自区域下分组的每个服务,即

Area 1

- service a

- service b

Area 2

- etc.

我已将所有服务的对象列表传递给service_list.html。我有一个自定义标记get_areas,它返回区域,我可以在其上创建区域分区,并且我可以从中将区域名称传递给服务过滤器。但由于我无法在{% for service in object_list %}中过滤(可以吗?),如何过滤HTML中每个区域部分的服务列表?

非常感谢。

3 个答案:

答案 0 :(得分:1)

如果您发布模型,我可以为您提供确切的代码,但一般来说,这样的事情应该有效:

# Pass in 'areas' variable from view with all required areas

{% for  area in areas %}
    {{ area.name }}
    {% for service in area.service_set.all %} #Gets all the services associated with an area
        {{ service.name }}
    {% endfor %}

{% endofor %}

不确定你是否需要自定义标签,但也许我只是不理解那部分。

答案 1 :(得分:0)

看一下regroup模板标签。它的构建目的完全相同 https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#regroup

我已经意识到的一件事是,一旦你明确了在模板中显示复杂的相互关联的数据,那么在将数据传递到模板之前将数据转换为适当的对象(通常是字典列表)是有意义的。

这样,您可以更轻松地测试信息,并且可以更轻松地显示信息。 (在基于Python的视图中,您将拥有许多功能强大的工具,而不是Django模板语言)。

答案 2 :(得分:0)

@Maz - 谢谢你。我现在正在学习,需要查看service_set

@arustgi - 完美无缺。为了帮助新手绊倒这个,我传入'queryset': Service.objects.all()并使用:

    {% regroup object_list by area as area_list %}
    {% for area in area_list %}
        <h2 class="separate">{{ area.grouper }}</h2>
        {% for service in area.list %}
        <div class="column">
            <h3>{{ service.title }}</h3>
            {{ service.body }}
        </div>
        {% endfor %}
    {% endfor %}

简洁,描述性的代码。非常感谢,你们两个