将旧网址重定向到更清晰的网址

时间:2011-12-20 21:49:50

标签: python django django-views

在重定向网址时遇到一些问题。

urls.py

url(r'^index\.asp$', views.Redirect, name='redirect'),

views.py

pageID = {
"2145841371" : "/home",
"2145887330" : "/club",
}

def Redirect(request):

pageID = request.GET.get('pageID')
return HttpResponseRedirect(redirect(pageID))

基本上我想要它做的是当用户尝试旧的URL(例如index.asp?pageID = 2145841371)时,它会将它们重定向到新的URL。想法?

3 个答案:

答案 0 :(得分:4)

干净利落的方式:

from django.core.urlresolvers import reverse
from django.shortcuts import redirect


# constant name should be uppercased
REDIRECTIONS = {
        '2145841371': reverse('home'),
        '2145887330': reverse('club'),
        'default': '/' # put here the URL to redirect to if mismatch
}

# function names should be lowercased
def redirect_legacy_urlid(request):

    # if no pageID, then default
    pageID = request.GET.get('pageID', 'default') 

    # if pageID doesn't match, then default
    url = REDIRECTIONS.get(pageID, REDIRECTIONS['default'])

    return redirect(url, permanent=True)

permanent=True非常重要,因此,如果用户再次从旧网址中回复,浏览器会以此方式对其进行缓存并使其成为更好的体验。加上搜索引擎将能够重新映射他们的结果。当然,只有在重定向应该是永久性的时候才这样做。

使用reverse()从urls.py架构中获取网址。这比对网址进行硬编码更好,因为您可以稍后改变主意,并且不想在任何地方重写它。

这意味着您必须使用names in your urls.py

答案 1 :(得分:2)

看起来你想要这样的东西:

def Redirect(request):
    redirect_map = {
        '2145841371': '/home',
        '2145887330': '/club',
    }
    pageID = request.GET.get('pageID')
    return redirect(redirect_map[pageID])

答案 2 :(得分:0)

我刚在“旧”视图中使用django.shortcuts.redirect,重定向到“新”视图的网址。

def oldview(request):
    # figure out what new view to send it to
    return redirect("new/url/", permanent = True)