DjangoのクラスベースのDetailView汎用ビューを使用して表示するオブジェクトを検索しています。特定の状況下では、オブジェクトを表示するのではなく、代わりにHTTP rediectを取り消して発行したいと考えています。私はこれをやってどうやって行くのか分かりません。これは、ユーザーがアプリでオブジェクトをヒットしたときのものですが、標準URLは使用しません。したがって、たとえば、StackOverflowののURLの形式をとる:Djangoの汎用ビューDetailViewからリダイレクト
http://stackoverflow.com/<content_type>/<pk>/<seo_friendly_slug>
例:
あなたが実際にseo_friendly_slugの一環として、何も入力することができますし、オブジェクトの正しい正規のURLにリダイレクトされますhttp://stackoverflow.com/questions/5661806/django-debug-toolbar-with-django-cms-and-django-1-3
PKを介して見上げた。
私はDetailViewで同じことをしたいと思います。オブジェクトを取得し、正規のURLであることを確認し、アイテムのget_absolute_url URLにリダイレクトしない場合は、そのオブジェクトを取得します。
get_objectでHttpResponseRedirectを返すことはできません。これは、検索されたオブジェクトを期待しているためです。コンテキストデータを期待しているだけなので、get_context_dataから返すことはできません。
多分私はマニュアルビューを書く必要があるかもしれませんが、誰かがそれが可能かどうか分かっていたのでしょうか?
ありがとうございます!
ルド。
ここでelseの場合は、親のgetメソッドを呼び出すことができます。それはずっとすっきりしているだろう。カスタム機能のためにクラスベースの汎用ビューが拡張されているので、それは価値があります。 – vimukthi
あなたのアプローチが良い点は、BaseDetailView.getの実装が変更されても心配する必要はありませんが、欠点はすべての要求に対してオブジェクト取得を2回実行する必要があることです。潜在的なパフォーマンス/スケーラビリティヒットの価値があります。 – Rolo
'get_object'へのダブルヒットを避けるために、自分のクラスやmixinでそれを上書きして' if hasattr(self、 'object'、None) 'というチェックを書いても構いません。チェックが成功すれば 'self.object'を返し、そうでなければ親の' get_object'を呼び出します。 @Raumkrautが実装されたのとまったく同じです(https://stackoverflow.com/a/12858110)。 – interDist