Django:使用附加的查询字符串重定向到相同的URL

时间:2016-03-10 22:27:58

标签: python django redirect

如何重定向到同一个网址但是向其附加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吗?

2 个答案:

答案 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)

在urls.py中

...

    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'}))