0

我在会话中设置了一些信息,我想知道是否可以将此信息传递到使用此会话数据的视图的 URL 上。我希望它以这样一种方式工作,即如果用户从该视图中为页面添加书签,则会话数据用于将变量传递到视图中。我怎样才能做到这一点?

我有一个过滤器视图,所以我希望在 URL 上显示当前选择的过滤器......有点像 www.mysite.com/filter1/filter2/filter3/ 然后如果 filter2 被清除,我将拥有 www.mysite.com/过滤器1/过滤器3/

目前我的过滤器视图的 URLConf 如下所示:

(r'^filter/$', 'filter'),
(r'^filter/(?P<p>\d{2})/$', 'filter'),
4

2 回答 2

2

正如您所说,在 url 上而不是在会话中传播数据。但是使用查询字符串 - 而不是路径,正如您在问题中所建议的那样。

没有神奇的方法可以做到这一点 - 您必须手动将变量附加到所有 url。但是,您可以将 url-creation 包装在一个函数中,以使其更易于管理。例如。:

$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";
  }
}

如果您使用它在应用程序中构建所有 url,您现在可以轻松地使变量“粘性”。例如。在页面顶部,您可以像这样使用它:

define_url_state('page', 1);

在页面下方,您可以使用url(). 然后,您将获得默认值 (1) 或用户传递给页面的$_GET.

于 2009-12-10T10:05:47.683 回答
0

在 django 中,您不使用 $_GET,而是使用 request.GET

假设您的网址是http://example.com?filter=filter1&filter=filter2&filter=filter5

您可以使用以下方式在视图中获取过滤器名称getlist()

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

所以你的 URL conf ( urls.py) 看起来像这样:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    url(r'^filters/$', 'your_app.views.some_view', name='filter_view'),
)
于 2009-12-10T16:00:17.603 回答