我有一些在会话中设置的信息,我想知道是否可以将此信息传递到使用此会话数据的视图的URL。我希望这样做的方式是,如果用户从该视图中为该页面添加书签,则会话数据用于将变量传递到视图上。我怎么能这样做?
我有一个过滤器视图,所以我希望当前选择的过滤器显示在URL ... sorta,如www.mysite.com/filter1/filter2/filter3/然后如果filter2被清除我将有www.mysite的.com /过滤器1 /过滤器3 /
目前我对过滤视图的URLConf如下所示:
(r'^filter/$', 'filter'),
(r'^filter/(?P<p>\d{2})/$', 'filter'),
答案 0 :(得分:2)
正如您所说,在网址上传播数据,而不是在会话中。但是使用查询字符串 - 而不是路径,正如您在问题中建议的那样。
没有神奇的方法可以做到这一点 - 您必须手动将变量附加到所有网址。但是,您可以将url创建包装在函数中,以使其更易于管理。例如:
$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";
}
}
如果您使用它来构建应用程序中的所有网址,您现在可以轻松地将变量设置为“粘性”。例如。在页面顶部,您可以像这样使用它:
define_url_state('page', 1);
在页面下方,您可以使用url()
生成网址。然后,您将获得默认值(1)或用户传递给页面$_GET
的任何内容。
答案 1 :(得分: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'),
)