2009-07-07 69 views
1

我正在使用django,並且擁有一個帶GET表單的靜態網頁和大約30個複選框。用戶選擇各種框,然後單擊搜索,並將數據庫中的結果返回到表中的同一頁面。但是,所有的複選框都已被清除,因爲HTML是無狀態的。使用查詢結果在同一頁面上保留複選框狀態

什麼是最簡單的方法來「記住」複選框的狀態?我已經瀏覽了django文檔,但是這些示例僅使用一個變量和一個IF來表示單個文本格式。當然,我不必檢查每個複選框是否在querydict中設置?另外,我的表單是自定義創建的,而不是使用django表單。

最終,我打算使用JSON作爲頁面,只更新表格,這樣可以解決這個問題,但我不確定它是否會引入更多,例如後退按鈕不適用於以前的搜索。

+0

謝謝大家。你幫我澄清了我沒有錯過任何Django快捷方式(使用自定義表單),最後我轉而使用JSON,所以現在我只需要弄清楚後退按鈕的事情。週末愉快。 – paulito 2009-07-10 08:13:22

回答

2

「什麼是 '記住' 複選框的狀態最簡單的辦法?」

Web事務是無狀態的。

有幾種常見的方法來實現狀態。

  1. 會議。如果您的用戶登錄,他們有一個會話。將東西存儲在會話中。他們POST的表格進入會話。然後可以檢索它以便將新表單發回給它們。

  2. 餅乾。會話使用cookies。您可以手動使用Cookie。你有兩個選擇。

    • 將表單複選框信息放入cookie中。發送它的響應。檢查每個請求中的cookie,以便知道將該表單用於何種類型。

    • 將會話密鑰放入cookie中。這是Django爲你做的。不要自己實現這個。

  3. 查詢URL中的字符串。你有兩個與cookie相同的選擇。可以將設置設置爲一個古老的base64字符串或傳遞一個代表該會話的ID。

0

有辦法解決後退按鈕問題(散列標籤和什麼不附加到一個URL)。但是,我一直都是這樣做的。本質上,我會在POST中將複選框作爲數組傳遞,然後在創建它們時,創建一個循環來創建所需的所有框,然後檢查POST以查看它是否已被選中。除此之外,我不知道。

0

使用GET?好。以與訪問文本框數據相同的方式訪問複選框。

request.GET中[ 'yourfield']

使用打印staments檢查GET中提供的信息。

打印request.GET中[ 'yourfield']

0

如果您使用的是Form對象,那麼您只需傳遞構造函數的請求並完成它。如果你手動完成,你必須做一些與會話相關的工作。

相關問題