持久设置url参数

时间:2012-01-10 06:17:22

标签: 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等等。 提前致谢。

1 个答案:

答案 0 :(得分:4)

一种选择是将其存储在request.session而不是request.GET中。它仍然可以像你希望的那样设置和访问:

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

request.session.get('param', 'default value')

有关使用会话的所有详细信息,请参阅here

例外情况是,如果您在URL中特别想要这样,那么它是透明的,用户可以更改它。

ETA:您的问题的一些答案:

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

  2. 将它放在网址中并不是一个好主意。有很多方法,但它们很麻烦。

  3. 您可以在RequestContext使用pass a request to a template进行修改。但是为什么你会在那里而不是在视图函数中呢?