2010-04-27 205 views
0

我有一個模板,顯示一個過濾器的形式,並在它下面的結果記錄列表。我將表單綁定到請求,以便過濾器表單將自身設置爲用戶在返回結果時提交的選項。過濾結果和分頁

我也使用分頁。使用分頁文檔中的代碼意味着當用戶單擊下一頁時,表單數據將丟失。

以這種方式處理分頁和過濾的最佳方法是什麼?

  • 將querystring傳遞給paginiation鏈接。
  • 將分頁鏈接更改爲表單按鈕,因此同時提交過濾器表單,但是這是假設用戶沒有弄錯過濾器選項。
  • 如上所述,但原始數據爲隱藏字段。

ALJ

回答

2

如果你不介意的調整您的網址一點你可以嵌入過濾器選項直接進入網址。這實際上具有使搜索選項具有書籤功能的好處。因此,當用戶單擊分頁上的下一個/上一個按鈕時,所有信息都將從URL中繼承。

雖然您可能必須將該網頁的網址分開。如果你已經在視圖函數中使用了一些關鍵字參數,你可以將該視圖的所有邏輯放在一個函數中。

簡單的例子

在你的urls.py

urlpatterns = patterns('', 
    (r'^some_url/to/form/$', 'myapp.myview'), 
    (r'^some_url/to/form/(?P<filter>[^/]+)/$', 'myapp.myview'), 
) 

然後在view.py

def myview(request, filter=None): 
    if request.method == 'POST': 
     # if the form is valid then redirect the user to the URL 
     # with the filter args embedded 
    elif filter is None: 
     form = MyForm() # init it with the blank defaults 
    elif filter is not None: 
     # Convert your filter args to a dict 
     data = {'my_form_field' : filter} 
     form = MyForm(data) 
    else: 
     # Sanity checking just in case I missed a case. Raise an exception. 
    # the rest of the display logic for the initialized form 

當然,還有這裏使用這樣的解決方案不適用的情況,但不知道更多關於你的具體情況,我不能說。

希望這會有所幫助!

+0

實際上,最終我將過濾器硬編碼到鏈接中,這不是很優雅,但工作。 – alj 2011-03-16 12:29:03