我在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)
作为我的客户模型的一部分,我尝试过上述方法来解决我的问题。但我不确定如何从我的模板中调用它。
答案 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>
这应该对你有用。