My question involves passing variables from the template to view in Django.
I know of passing variables in the URL and through a form. The problem I have with the first
There are three ways to get data from an html page into the server backend: URL (GET), Form (POST), and Cookies.
Any of the three may be manipulated so you need to validate everything on the server every time no matter what.
In terms of efficiency, per your post title, URL (GET) variables a slightly more efficient since form data goes through a mild amount of encoding before it is sent on to the server.
Under normal usage the standard is to use URL (GET) variables when you are retrieving data from the server and to use Form (POST) variables when you want to manipulate (edit/delete) data on the server.
There are broadly 3 ways to hold onto this kind of information:
Just stuff the data you want into the request.session
dictionary; it'll persist per-user, and you can access it easily:
# view1
request.session['name1'] = male_results
request.session['userid1'] = male_pic_userid
# view2 (or elsewhere in view1)
male_results = request.session.get('name1')
male_pic_userid = request.session.get('userid1')
POST
, page content is dictated by the URL and session data — URLs are no longer unique, and users can't share a particular page that relies on session infoSomething like /match/?name1=foo1&userid1&name2=bar&userid2=2
. You can either add these manually (<a href='/match/?name1={{ male_results }}...
) or by changing your POST
form to GET
.
POST
data to every navigation action is a huge pain.