4
私はフォーラムを構築しています。 URLを処理するときに、ボードIDとボード名があります。名前は読みやすくするためのもので、IDはボードを取り込むものです。これは、名前が間違っているか、または変更された場合、ユーザーを適切なURLにリダイレクトすることを意味します。いくつかの検索は私をデコレータに導いてきましたが、私はそれらの使い方を教えるリソースは見つかりません。カスタムデコレータを書くDjango
# urls.py
...
url(r'^boards/(?P<board_id>\d+)/(?P<board_name>[^/]+)/$', views.board, name='board'),
...
# views.py
@redirect_if_wrong_boardname
def board(request, board_id, board_name):
...
return render(request, 'forums/board.html', {'board': board})
デコレータに次のロジックを実装するにはどうすればよいですか?
board = Board.objects.all().get(pk=pk)
if (board.name != name):
return redirect(request.get_full_path().replace(name, board.name, 1))
がなぜここデコレータ便利なのですか?あなたの実装は、Boardモデルとその特定のURLに強く結びついています。デコレータは、さまざまな機能に再利用可能な動作を交換可能に追加するためにより頻繁に使用されます。あなたは、あなたが望むものを自由に行うことができますが、プロトタイプでない限り、デコレータを使用する珍しい方法です。あなたのコードでは何も問題はありませんが、view関数でもうまくいくでしょう。 –
うん、それはこれが何であるか:例。私はboard_nameパラメータを取る多くのビューでこれの変形を使用する予定です。 – mei
実験を離れて! djangoは非常に柔軟性があり、境界から外れています。 –