1
私はスラッグを修正するためにすべてのビューを実行する機能を持っています。 例えば、スラッグが/ about-about-about-stuffであり、ユーザーが/ 12-post-abot_stofを入力すると、それらは正しくリダイレクトされます。問題は、異なるビューは、例えば、異なるURLパターンを持っていることです。Django:スラッグが間違っているとURLをリダイレクト
/posts/post_slug/
...
/posts/post_slug/comments/new
私は現在のURLに基づいてスラッグ名を固定することによってリダイレクト機能を記述する方法?
編集:私は、すべてのビューにboard_nameとpk引数を使ってデコレータを適用しています。私が知らないのは、url形式が各ビューごとに異なるため、新しいURLを動的に返す方法です。
def correct_board_url_name(func):
def wrapper(request, board_slug):
try:
pk = int(board_slug.split('-')[0])
board = Board.objects.get(pk=pk)
if (board.slug != board_slug):
# This does not always work depending on what is entered
return redirect(request.get_full_path().replace(board_slug, board.slug, 1))
else:
return func(request, board_slug)
except:
raise Http404('')
return wrapper
あなたはもう少し手の込んだことはできますか? –
正しいURLに不正なURLを対応させる計画はありますか?それはPK 12に基づいていますか?クラスベースのビューまたは関数ベースのビューを使用していますか? –
クラスベースのビュー、わかりやすく編集されました – mei