我是一個真正的編程白人,我想確保這種方法足夠穩固。Django - 對以前過濾的列表進行排序
我想過濾我的模型的搜索結果,然後允許用戶根據各種變量對結果進行排序。我的想法是將過濾器變量作爲GET參數附加到排序鏈接(然後它將具有唯一的排序變量)。
我看過其他網站,似乎有可能是一個更優雅的解決方案(它們不包含巨大querystrings)。
有沒有更好的方法?
我是一個真正的編程白人,我想確保這種方法足夠穩固。Django - 對以前過濾的列表進行排序
我想過濾我的模型的搜索結果,然後允許用戶根據各種變量對結果進行排序。我的想法是將過濾器變量作爲GET參數附加到排序鏈接(然後它將具有唯一的排序變量)。
我看過其他網站,似乎有可能是一個更優雅的解決方案(它們不包含巨大querystrings)。
有沒有更好的方法?
爲了避免querystrings你可以使用Django的url路由。接下來的挑戰將是爲您的鏈接生成適當的網址。
Django有方便的url template tag。您可以使用它來確定給定網址名稱及其參數的網址。
在你的urls.py你可能會碰到這樣的:
url(r'^sort/(\d{4})/(\d{2})/$', 'funkysort', name='funkysort'),
我使用url function **在我的URLconf(urls.py),使其更容易說出我的網址。我爲{%url%}模板標記命名了我的網址。
在您的模板,你可以再做:
{% url funkysort 5 10 %}
和Django會產生類似:
/mysite/sort/5/10/
**注:這是不是網址模板標籤不同。如果您想在代碼中執行url模板標籤的等效功能,請使用reverse函數。
如果你想縮短它的話,Django的管理員會使用像o = 3這樣的索引。
您可以將排序字段映射到索引或其他更漂亮的名稱。
sorts = {
0: 'field1',
1: 'field2',
2: 'field3',
}
qs = qs.order_by(sorts.get(request.GET.get('o'), 'id'))
您需要添加升序/降序代碼,但這只是一個簡單的例子。
呵呵,我不知道如何以這種方式發送參數給url函數,這很有用。 – Ben 2011-03-24 17:11:04
儘管如此,儘管如此,我仍然需要用這種方法附加所有變量。我只是通過url路由而不是GET參數來實現的,對嗎? – Ben 2011-03-24 17:11:54
我更喜歡GET進行排序,因爲它只是修改單個頁面的輸出,對於我來說,不同的URL意味着明顯分離的內容。我相信大家在這裏有自己的看法。 – 2011-03-26 04:13:29