English 中文(简体)
Pass session data onto URL
原标题:

I have some information that is set in the sessions, and I was wondering if it s possible to pass this info onto the URL for the view that uses this session data. I want this to be working in such a way that if the user bookmarks the page from that view, the session data is used to pass the variables onto the view. How can I do this?

I m having a filter view so I want the currently selected filters displayed on the URL...sorta like www.mysite.com/filter1/filter2/filter3/ then if filter2 is cleared I ll have www.mysite.com/filter1/filter3/

Currently my URLConf for the filter view looks like this:

(r ^filter/$ ,  filter ),
(r ^filter/(?P<p>d{2})/$ ,  filter ),
问题回答

As you say, propagate the data on the url, rather than in session. But use the query-string - not the path, as you seem to suggest in your question.

There is no magic way to do this - you ll have to manually append the variables to all urls. You can however wrap the url-creation in a function, to make this more manageable. Eg.:

$GLOBALS[ url_state ] = array();

function url($base, $params = array()) {
  global $url_state;
  $q = http_build_query(array_merge((array) $url_state, $params));
  return $q ? "$base?$q" : $base;
}

function define_url_state($name, $default = null) {
  global $url_state;
  if (isset($_GET[$name])) {
    $url_state[$name] = $_GET[$name];
  } elseif ($default !== null) {
    $url_state[$name] = "$default";
  }
}

If you use this to build all your urls in the application, you can now easily make a variable "sticky". Eg. at the top of your page, you could use it like this:

define_url_state( page , 1);

And further down the page, you can generate urls with url(). You would then get either the default value (1) or whatever the user passed to the page s $_GET.

In django you don t use $_GET, but request.GET

lets say your url is http://example.com?filter=filter1&filter=filter2&filter=filter5

you can get the filter names in a view using getlist() like this:

def some_view(request):
    filters = request.GET.getlist( filter )

so you URL conf (urls.py) will look something like this:

from django.conf.urls.defaults import *

urlpatterns = patterns(  ,
    url(r ^filters/$ ,  your_app.views.some_view , name= filter_view ),
)




相关问题
How to get two random records with Django

How do I get two distinct random records using Django? I ve seen questions about how to get one but I need to get two random records and they must differ.

Moving (very old) Zope/Plone Site to Django

I am ask to move data from a (now offline) site driven by Plone to a new Django site. These are the version informations I have: Zope Version (unreleased version, python 2.1.3 ) Python Version 2.1....

Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

Flexible pagination in Django

I d like to implement pagination such that I can allow the user to choose the number of records per page such as 10, 25, 50 etc. How should I go about this? Is there an app I can add onto my project ...

is it convenient to urlencode all next parameters? - django

While writing code, it is pretty common to request a page with an appended "next" query string argument. For instance, in the following template code next points back to the page the user is on: &...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

热门标签