持续设置url参数

exf*_*zik 2 django django-views

在我的Django网站中,我有一个要通过url或查询字符串设置的特定参数。例如mysite.com/?param=value。我希望此值一经设置就传递给所有视图-我可以使用进行检查request.GET.get('param', 'default value')。在Django中最简单的方法是什么?

为了更加清楚,这是一个示例-在我网站的标题中,我有一个带有年份列表的下拉菜单。当我单击其中一个选项时,我希望今年继续使用到网站的其他所有部分,即mysite.com/?year=1999,然后是mysite.com/somethingelse/?year=1999mysite.com/onemorething/?year=1999依此类推。提前致谢。

Dav*_*son 5

一种选择是将其存储在中,request.session而不是存储在中request.GET。仍将按照您希望的那样进行设置和访问:

request.session["param"] = "my value"

request.session.get('param', 'default value')
Run Code Online (Sandbox Code Playgroud)

有关使用会话的所有详细信息,请参见此处

例外情况是,如果您特别希望在URL中使用它,以便它是透明的并且用户可以更改它。

预计到达时间:您的问题的一些答案:

  1. 如果您确实希望?year = 1999 URL在任何视图中设置会话变量,则可以创建一个自定义的中间件类。中间件充当过滤器,可以在到达视图之前更改HttpRequest,或更改从视图返回的HttpResponse。在这种情况下,您可以让它在执行视图之前检查request.GET并根据需要设置request.session。请参阅文档,并确保阅读有关中间件的详细信息。

  2. 将其包含在URL中并不是一个好主意。有很多解决方法,但是麻烦很多。

  3. 您可以使用RequestContext的请求传递给模板,并在那里修改。但是,为什么在地球上而不是在视图函数中这样做呢?