如何使用django process_request更改URL。

时间:2011-06-16 02:47:56

标签: python django url middleware

这是我的代码:

class MobileMiddleware(object):

    def process_request(self, request):
        if request.path.startswith('/core/mypage/'):
            request.path='/core/mypage/?key=value'
            print request.path,'aaaa'

我想在页面网址为key时添加参数/core/mypage/

并且网络浏览器的网址将更改为http:www.ss.com/core/mypage/?key=value

但是,浏览器中的网址不会更改。

我该怎么办?

5 个答案:

答案 0 :(得分:12)

对于googlers - 我使用request.path_info进行了测试。如果要更改middlware中的URL,请在process_request中更改request.path_info。

request.path_info = <change request.path_info>

请注意,我不建议或禁止使用此功能。我只想说如果你想改变网址,就可以这样做。

答案 1 :(得分:3)

问题是HttpRequest.path是一个普通属性。更改它不会对浏览器进行任何新的说明。您可能正在寻找redirect方法,它实际上会强制浏览器转到其他地方。

答案 2 :(得分:1)

试试这个

return HttpResponseRedirect('/core/mypage/?key=value')

答案 3 :(得分:1)

request.path_info没有为我更改浏览器地址栏中的网址,但此重定向确实:

from django.shortcuts import redirect


class DomainRedirectMiddleware(object):

    def process_request(self, request):

        if request.path.startswith('/core/mypage/') and not request.GET:
            return redirect('/core/mypage/?key=value')  # works!
            #request.path_info = '/core/mypage/?key=value'  # works, but does not change url in browser address bar

Django还提供了一个&#34; Redirects App&#34;自Django 1.3以来,其中包括以下中间件:&#39; django.contrib.redirects.middleware.RedirectFallbackMiddleware&#39; 。请参阅redirects app documentation,它允许您从管理界面创建重定向。

我尝试使用该应用程序进行相同的重定向,但它确实有效。干杯!

答案 4 :(得分:0)

我没有对此进行测试,但请尝试request.GET["key"] = val

之类的内容

修改或者使用request.path_info代替request.path