在我的Django网站上,我有一个我想通过url或查询字符串设置的参数。例如。 mysite.com/?param=value
。我希望在设置完所有视图后将其传递给所有视图 - 我可以使用request.GET.get('param', 'default value')
进行检查。在Django中最简单的方法是什么?
为了更清楚,这是一个例子 - 在我的网站的标题中,我有一个带有年份列表的下拉菜单。一旦我点击其中一个选项,我希望今年将其转移到我网站的所有其他部分,即mysite.com/?year=1999
,然后mysite.com/somethingelse/?year=1999
,mysite.com/onemorething/?year=1999
等等。
提前致谢。
答案 0 :(得分:4)
一种选择是将其存储在request.session
而不是request.GET
中。它仍然可以像你希望的那样设置和访问:
request.session["param"] = "my value"
request.session.get('param', 'default value')
有关使用会话的所有详细信息,请参阅here。
例外情况是,如果您在URL中特别想要这样,那么它是透明的,用户可以更改它。
ETA:您的问题的一些答案:
如果您确实需要?year = 1999 URL来在任何视图中设置会话变量,则可以创建自定义middleware类。中间件充当过滤器,可以在HttpRequest到达视图之前更改它,或者更改从视图返回的HttpResponse。在这种情况下,您可以检查request.GET并在必要时设置request.session,然后再执行视图。请参阅文档,并务必阅读有关中间件的详细信息。
将它放在网址中并不是一个好主意。有很多方法,但它们很麻烦。
您可以在RequestContext使用pass a request to a template进行修改。但是为什么你会在那里而不是在视图函数中呢?