2009-09-22 67 views
3

我不知道是否有可能,但是我想使用中间件在URL的末尾添加一些参数。完成请求的URL后可以不重定向吗?在Django中间件中修改地址

即。 用户点击:.../some_link 和中间件其重写为:??/ some_link PAR1 = 1个& PAR2 = 2

另一种方法是修改作出反应并更换所有的HTML链接,但它不是我我喜欢做。

感谢

回答

1

我认为这真的取决于你的问题以及你究竟在做什么。

如果不重定向用户,则无法更改URL,因为您无法在没有重新加载的情况下修改页面上的URL。基本上重定向是一个回应,告诉用户继续前进,没有办法改变URL。请注意,即使你用JavaScript这样的东西来做,你基本上和重定向一样,所以它不能在客户端或服务器端完成。

我认为这可能有帮助,如果你向我们解释为什么你需要通过URL传递这些信息。为什么不在会话中存储数据?

我想你可以将数据添加到请求对象,但不会将其添加到URL。

+0

谢谢,终于这对我来说很清楚。 – yezooz 2009-09-22 20:30:59

4
class YourRedirectMiddleware: 

    def process_request(self, request): 
     redirect_url = request.path+'?par1=1&par2=2' 
     return HttpResponsePermanentRedirect(redirect_url) 

什么是你想实现的目标以及为什么这样?

+0

但它是否重定向,我想避免。 结果应该像oldschool在请求之间的URL中传递session_id一样。我不得不这样做:/ – yezooz 2009-09-22 11:42:33

+0

你应该警惕这个解决方案,就好像你有POST数据一样,它将在重定向期间丢失。 – 2009-09-22 14:02:08

+0

解释你的需求,我不明白你为什么要这样做 – zalew 2009-09-22 14:32:56

0

你可以在中间件中做任何你喜欢的事情。您可以访问请求对象,如果需要,您可以获取URL并重定向到新的URL。

我的问题是,你为什么要这样做?如果您需要保留有关请求的信息,那么适当的位置在会话中。