Django-对以前筛选的列表进行排序

Django-对以前筛选的列表进行排序,django,Django,我是一个真正的编程高手,我想确保这种方法足够可靠 我想为我的模型过滤搜索结果,然后允许用户根据各种变量对结果进行排序。我的想法是将过滤器变量作为GET参数附加到sort链接(该链接将具有唯一的sort变量) 我看过其他网站,似乎有一个更优雅的解决方案(它们不包含巨大的查询字符串) 有更好的方法吗?为了避免查询字符串,可以使用Django的url路由。接下来的挑战将是为您的链接生成适当的URL Django有一个方便的工具。您可以使用它来确定给定url的url名称及其参数 在您的URL.py中,您

我是一个真正的编程高手,我想确保这种方法足够可靠

我想为我的模型过滤搜索结果,然后允许用户根据各种变量对结果进行排序。我的想法是将过滤器变量作为GET参数附加到sort链接(该链接将具有唯一的sort变量)

我看过其他网站,似乎有一个更优雅的解决方案(它们不包含巨大的查询字符串)


有更好的方法吗?

为了避免查询字符串,可以使用Django的url路由。接下来的挑战将是为您的链接生成适当的URL

Django有一个方便的工具。您可以使用它来确定给定url的url名称及其参数

在您的URL.py中,您可能有如下内容:

url(r'^sort/(\d{4})/(\d{2})/$', 'funkysort', name='funkysort'),
/mysite/sort/5/10/
我在urlconf(urls.py)中使用**来更容易地命名我的url。我命名我的url是为了{%url%}模板标记

在模板中,您可以执行以下操作:

{% url funkysort 5 10 %}
Django将生成如下内容:

url(r'^sort/(\d{4})/(\d{2})/$', 'funkysort', name='funkysort'),
/mysite/sort/5/10/

**注意:这与url模板标记不同。如果您想在代码中使用url模板标记,请使用该函数。

Django的管理员使用o=3这样的索引,如果您想缩短它的长度

您可以将排序字段映射到索引或其他更漂亮的名称

sorts = {
    0: 'field1',
    1: 'field2',
    2: 'field3',
}

qs = qs.order_by(sorts.get(request.GET.get('o'), 'id'))

您还需要添加升序/降序代码,但这只是一个简单的示例。

嗯,我不知道如何用这种方式将参数发送到url函数,这很有用。不过,在一天结束时,我似乎仍然需要使用此方法附加所有变量。我只是通过url路由来实现,而不是获取参数,对吗?我更喜欢使用GET进行排序,因为它只是修改单个页面的输出,而对我来说,不同的url意味着明显不同的内容。我相信每个人在这里都有自己的看法。YUJI说得很好。最快最脏的事情是手工写出参数。这里有一个更优雅的解决方案,可以编写自定义模板标记(url不支持它):