在Django中修改地址的中间件
我不知道这是否可行,但我想在网址的末尾加几个参数,想通过中间件来实现。有没有办法在修改请求的网址后,不进行重定向?
比如,用户点击了:.../some_link,然后中间件把它改成:.../some_link?par1=1&par2=2
另一种方法是修改响应,替换每个HTML链接,但我不想这样做。
谢谢
3 个回答
0
在中间件里,你可以做任何你想做的事情。你可以访问请求对象,这样你就能获取到网址,如果需要的话,还可以把用户重定向到新的网址。
我想问的是,你为什么想这么做呢?如果你需要保存关于请求的信息,最合适的地方就是在会话里。
4
class YourRedirectMiddleware:
def process_request(self, request):
redirect_url = request.path+'?par1=1&par2=2'
return HttpResponsePermanentRedirect(redirect_url)
你想要达到什么目的?为什么选择这种方式呢?
1
我觉得这主要取决于你遇到的问题和你想要做的事情。
你不能在不让用户跳转的情况下改变网址,因为在页面上不重新加载是无法修改网址的。简单来说,跳转就是告诉用户去另一个地方,没有办法真正改变网址。即使你用JavaScript来做,实际上也是在进行跳转,所以无论是在客户端还是服务器端都无法做到这一点。
我觉得如果你能告诉我们你为什么需要通过网址传递这些信息,可能会更有帮助。为什么不把数据存储在会话中呢?
我想你可以把数据添加到请求对象中,但这样并不会把它加到网址里。