在重定向网址时遇到一些问题。
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。想法?
答案 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)