如何在视图中订购一组对象

Posted

技术标签:

【中文标题】如何在视图中订购一组对象【英文标题】:How to order a set of object in a view 【发布时间】:2013-09-29 19:08:31 【问题描述】:

我的代码目前列出了server 中的所有domains 使用:

% for domain in server.domain_set.all %

我想通过它们的 url 对视图中的域进行排序。比如:

% for domain in server.domain_set.all().order_by('url') %

但我得到了一个例外"could not parse the remainder"。如何订购列表?

【问题讨论】:

【参考方案1】:

“无法解析余数”错误是因为您在 django 模板中包含 Python 代码。 Django 不允许这样做。

您可以在模型上添加一个方法:

def sorted_domains(self):
    return self.domain_set.all().order_by('url')

然后这样称呼它:

% for domain in server.sorted_domains %

另一种方法是使用Meta attribute 在Domain 模型上设置默认排序顺序。

【讨论】:

好建议,+1。 @BurhanKhalid 同意,我真的很喜欢这个,而不是在模板中这样做。干净多了。【参考方案2】:

您可以使用dictsort 过滤器:

获取字典列表并返回按键排序的列表 在参数中给出。

% for domain in server.domain_set.all|dictsort:'url' %

另见:

Sorting related items in a Django template order_by template filter

【讨论】:

以上是关于如何在视图中订购一组对象的主要内容,如果未能解决你的问题,请参考以下文章

如何快速订购两个动态表格视图单元格?

订购一组对象?

如何在 C++ 中使用两个排序标准(对于一组对)创建一个有序集?

如何在 Rails 3 中订购包含的元素

Rails:在嵌套视图中订购商品

在订购应用程序中设置核心数据关系