2013-01-23 44 views
0

所以我寫了一個應用程序返回查詢結果。假設查詢網址爲/query/?A=a&B=bdjango修改模板中的請求參數

現在我想在結果頁面上添加一個「排序方式」按鈕,以便用戶按時間或類型對結果進行排序。本質上只是允許用戶訪問/query/?A=a&B=b&sorted=time/query/?A=a&B=b&sorted=type

最簡單的方法是在當前URL後追加sorted=。例如<a href = "{{ request.get_full_path }}&sorted=time">但問題是,如果用戶第一次按時間排序,然後按類型排序,您將有/query/?A=a&B=b&sorted=type&sorted=time

我想我可以做一些奇特的字符串操作,但我不知道我是否可以做到這一點Django模板語言,我想有一個更好的方法來做到這一點。應該有一個地方我可以修改GET請求並讓頁面刷新。

非常感謝!

回答

0

你可能想看看django-tables2's solution(你可能只是想看看在一般如果Django的tables2你在表格中顯示這些數據)。

+0

真棒應用程序,謝謝。 – CodeNoob

0

兩個GET變量具有相同的名稱是ambigious。您可以爲不同類型的排序定義不同的變量。根據上下文,排序有兩個選項,分別是升序或降序,還需要這些值,以便用戶可以返回到默認排序。

/query/?A=a&B=b&sort_type=asc&sort_time=desc 
鑑於

然後:

sort_type = request.GET.get('sort_type', '') 
sort_time = request.GET.get('sort_time', '') 

qs = MyModel.objects.all() 

if sort_type: 
    if sort_type == 'asc': 
     qs = qs.order_by('type') 
    elif sort_type == 'desc': 
     qs = qs.order_by('-type') 

# same goes with sort_time 
# ... 
# pass sort_type and sort_type or all get variables in the context to generate url in template 
模板

現在:

<a href = "{{ request.get_full_path }}?&sort_time={{sort_time}}&sort_type={{sort_type}}">