如何重定向到同一个网址但是向其附加query_string?即。从“base.com/amt”重定向到“base.com/amt/?ref=blah&id=blah”
urls.py
url(r'^amt/$', RedirectView.as_view(reverse_lazy('amt')), {'SSL':True}),
url(r'^amt/?ref_source=AMT&ref_id=PC', 'core.views.show_amt_page', {'SSL':True}, name='amt'),
在这种情况下,我想从“^ amt / $”转到“^ amt /?ref_source = AMT ...”
重定向完成后,我需要执行show_amt_page()
int views.py
如果有更好的方法,有人可以解释如何做到这一点,让django在show_amt_page()
中执行views.py
吗?
答案 0 :(得分:2)
查询字符串不是由url模式处理的,因此你只能有/amt/
的一个url模式,它将处理带有和不带get参数的请求。
url(r'^amt/', 'core.views.show_amt_page', {'SSL':True}, name='amt'),
在show_amt_page
视图中,您可以检查request.GET
中的获取参数,并在必要时返回重定向响应。
from django.shortcuts import redirect
def show_amt_page(request, SSL):
if 'ref_source' not in request.GET:
return redirect('amt/?ref_source=AMT&ref_id=PC')
# rest of view goes here
...
答案 1 :(得分:0)
...
url(r'^$', pages.home, name='home'),
...
函数tu使用GET参数构建一个URL
from django.core.urlresolvers import reverse
from django.http.response import HttpResponseRedirect
def build_url(*args, **kwargs):
get = kwargs.pop('get', {})
url = reverse(*args, **kwargs)
if get:
url += '?' + urllib.urlencode(get)
return url
使用示例
return HttpResponseRedirect(build_url('home', get={'ref_source': 'AMT','ref_id':'PC'}))
return HttpResponseRedirect(build_url('home', get={'opcion': '1'}))