【问题标题】:Using multiple model fields to regroup list in Django template使用多个模型字段在 Django 模板中重新组合列表
【发布时间】:2012-02-05 03:41:27
【问题描述】:

我在 Django 模板中使用 regroup 标签来列出一些按客户分组的项目。我的模型是:

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

我可以列出项目 customer.name(或 customer.city),我真正想要的是将它们订购为“名称,城市”。根据文档“任何有效的模板查找都是重组标签的合法分组属性,包括方法、属性、字典键和列表项。” [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)

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

【问题讨论】:

  • 能否请您详细说明一下您到底想要什么。

标签: django templates


【解决方案1】:

你的模型函数是正确的,但它应该在大括号前包含一个%

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>

这应该很适合你。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2018-11-01
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多