我是编程的真正菜鸟,我想确保这种方法足够扎实。
我想过滤模型的搜索结果,然后允许用户根据各种变量对结果进行排序。我的想法是将过滤器变量作为GET参数附加到排序链接(然后它将具有唯一的排序变量)。
我看过其他网站,似乎有一个更优雅的解决方案(它们不包含巨大的查询字符串)。
有更好的方法吗?
答案 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'))
您还需要添加升序/降序代码,但这只是一个简单的例子。