Django - 对先前过滤的列表进行排序

时间:2011-03-24 16:37:30

标签: django

我是编程的真正菜鸟,我想确保这种方法足够扎实。

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

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

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

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

在你的urls.py中你可能有类似的东西:

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

我在我的urlconf(urls.py)中使用url function **,以便更容易命名我的网址。我是为了{%url%}模板标记命名我的网址。

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

{% url funkysort 5 10 %}

和Django会产生类似的东西:

/mysite/sort/5/10/

**注意:这与url模板标签不同。如果您想在代码中执行与url模板标记等效的操作,请使用reverse函数。

答案 1 :(得分:0)

Django的管理员使用o = 3之类的索引,如果你想缩短它。

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

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

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

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