2011-12-20 22 views
2

URLをリダイレクトするときに問題が発生しました。古いURLをクリーナーURLにリダイレクト

ユーザーが古いURLをしようとしたとき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)) 

は基本的に私はそれが何をしたいかである(例えばindex.asp?たpageID = 2145841371)それそれらを新しいものにリダイレクトします。思考?

+0

Pythonでcamelcaseを使用しないでください.PEP8には対応していません。関数名と同じですが、小文字にする必要があります。これはコミュニティ標準です。ここで主な問題は 'HttpResponseRedirect'と' redirect() 'を使うことです。後者はすでに前者を返しているので、あなたはそれを必要としません。 –

答えて

2

あなたはこのような何かしたいように見えます:私はちょうど「新しい」ビューのURLにリダイレクトする、「古い」ビュー内django.shortcuts.redirectを使用

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

うーん、エラーは出てこないが、指定されたURLではなく、現在のページにリダイレクトされるだけだ。しかし、かなり良い! – UniAvenger

+0

甘い私はそれが働くようになった、ちょうどリダイレクトを削除しなければならなかった。助けてくれてありがとう! – UniAvenger

+0

これは動作しません。 'redirect()'は既に 'HttpResponseRedirect'を返すので、別のものを追加する必要はありません。それを取り除く。さらに、これはあまり堅牢ではありません。ハードコードURL、すべてのビュー呼び出し時にマッピングを行い、 'pageID'が提供されないか、またはpageIDがURLと一致しない場合はフォールバックはありません。そしてあなたはSEOを害するかもしれない一時的なリダイレクションを行います。私は-1を置いていません、それはまだヘルプルな答えですが、あなたはそれを改善することができます。 –

0

を。

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

ええ、私はこの方法でやっていますが、古いURLをたくさん扱っていますので、それらのリストが扱いやすくなります。 – UniAvenger

3

それを行うためのクリーンな方法は:

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が重要であるので、この方法は、ブラウザはこれをキャッシュし、ユーザーが再び古いURLからCOMMEあればより良い経験になります。プラス検索エンジンは結果を再マップすることができます。もちろん、リダイレクトが永続的であると思われる場合にのみ実行してください。

reverse()を使用すると、urls.pyスキーマからURLを取得できます。 URLをハードコードするよりも優れています。なぜなら、これについて後で考え直すことができ、どこにでも書き直したくないからです。

これはnames in your urls.pyを使用する必要があることを意味します。

+0

私は、同様のルートをpermanent = Trueで実行し、HttpResponsePermanentRedirectを使用しました。また、私は各URLの名前を持っていましたが、あなたの実際のURLではなく各URLの名前を使用する必要があるので、あなたの方法は同じではありませんか? – UniAvenger

関連する問題