这是我的代码:
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
但是,浏览器中的网址不会更改。
我该怎么办?
答案 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