views:

245

answers:

4

I'm using django, and have a static webpage with a GET form, and about 30 checkboxes. The user selects various boxes, and clicks search, and a result from a database is returned to the same page in a table. However, all the checkboxes have been cleared, since HTML is stateless.

What's the simplest solution to 'remember' the state of the checkboxes? I've looked through django docs, but the examples just use a variable and an IF for a single text form. Surely, I dont have to check if each checkbox is set in the querydict? Also, my form was custom created, rather than using django forms.

Eventually, i was planning to use JSON for the page and only update the table, and that would solve this problem, but Im not sure if it would introduce many more, eg back button not working for previous searches.

A: 

There are ways to fix the back button issue (hash tags and whatnot appended to an URL). However, the way that I have always accomplished this is through just that. Essentially, I would pass the checkboxes as an array in POST and then, when you go to make them, just make a loop that will make all the boxes you need, and check against POST to see if it's been checked or not. Other than that, I don't know.

Peter
A: 

Using GET? Good. Access the check boxes the same way you access textfield data.

request.GET['yourfield']

Use print staments to inspect the information available in GET.

print request.GET['yourfield']

mcandre
+1  A: 

"What's the simplest solution to 'remember' the state of the checkboxes?"

Web transactions are stateless.

There are several common ways to implement state.

  1. Sessions. If your user is logged in, they have a session. Store stuff in their session. The form they POST goes into the session. This can then be retrieved in order to post a new form back to them.

  2. Cookies. Sessions use cookies. You can use cookies manually. You have two choices here.

    • Put the form checkbox information into the cookie. Send it down with the response. Check for the cookie in each request so you know what to seed the form with.

    • Put a session key in the cookie. This is what Django does for you. Don't implement this yourself.

  3. Query strings in the URL. You have the same two choices as with cookies. Either make the settings a big-old base64 string or pass an ID that stands in for the session.

S.Lott
A: 

If you were using a Form object, then you could just pass the constructor the request and be done with it. If you're doing it manually, you'll have to do some finangling with the session.

Xiong Chiamiov