使用多个模型字段重新组合Django模板中的列表

时间:2012-01-08 00:15:21

标签: django templates

我在Django模板中使用regroup标签列出了按Customer分组的多个项目。我的模特是:

class Customer(models.Model):
  name = models.CharField(max_length=25)
  city = models.CharField(max_length=25)

我可以列出customer.name(或customer.city)项目,我真正想要的是将它们命名为“Name,City”。根据文档“任何有效的模板查找是regroup标记的合法分组属性,包括方法,属性,字典键和列表项。” [1]如何为此定义方法?我如何从我的模板中调用它?

[1] https://docs.djangoproject.com/en/dev/ref/templates/builtins/

更新:据我了解重新组合功能,并且现在正在使用它,我使用对象的某个字段对列表进行分组。分隔符customer.grouper显示该特定字段的名称。在我的情况下,“customer.name”或“customer.city”。我的目标是将它们呈现在一起,例如“customer.name,customer.city”(即“Microsoft,Redmond”)。文档简要提到了这一点,但我无法弄明白。

def display_name(self):
  return "%s, %s" (self.name, self.city)

作为我的客户模型的一部分,我尝试过上述方法来解决我的问题。但我不确定如何从我的模板中调用它。

1 个答案:

答案 0 :(得分:2)

您的模型函数是正确的,但在大括号之前应该包含%

def display_name(self):
  return "%s, %s" %(self.name, self.city)

您的视图应该传递对象列表而不是值。

让列表为tp,因此您的模板代码应该是这样的:

{% regroup tp by display_name as tp_list %}

<ul>
{% for t in tp_list %}
    <li>{{ t.grouper }}
    <ul>
        {% for item in t.list %}
            <...something of your code....>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>

这应该对你有用。