Django でビューをチェーンするにはどうすればよいですか?
-
21-08-2019 - |
質問
実装してるよ ジェームズ・ベネット素晴らしい ジャンゴお問い合わせフォーム しかし、障害に遭遇しました。私の連絡先ページにはフォームだけでなく、追加のフラット ページ情報も含まれています。
コンタクトフォームが使用する既存のビューを書き換えずに、ビューをラップまたはチェーンできるようにしたいと考えています。このようにして、コンテキストを介して追加情報を挿入できるため、フォームとフラット ページのデータの両方を同じテンプレート内でレンダリングできます。
これが可能であるということを聞いたことがありますが、それを機能させる方法がわかりません。連絡先フォーム ビューと呼ばれる独自のラッパー ビューを作成し、追加できる属性の HttpResponse オブジェクトを検査しようとしましたが、属性がある場合、それがどれであるのかがわかりません。
編集: James は最新のコードが新たに見つかるとコメントしました ここ ビットバケットで。
解決
- URL を使用して適切なフラット ページ オブジェクトを検索するラッパーを作成します。
- ラッパーから、コンタクトフォームビューを呼び出し(そして応答を返し)、フラットページを
extra_context
引数 (特に、まさにこの種の使用例のために存在します)。 - 3番目のステップはありません。
他のヒント
あなたが望むことを実行できるコンテキストプロセッサがあります。
http://docs.djangoproject.com/en/dev/ref/templates/api/
おそらく、さまざまな「フラット ページ情報」をコンテキストに追加できます。
あなたが考えているのはコンテキストプロセッサです。そして、render_to_response は無関係です。必要な情報は、ビューが RequestContext を使用するかどうかです。それがコンテキスト プロセッサをアクティブにするためです。
これら以外に、ビューを「チェーン」してコンテキストに追加する方法はありません。あるビューを別のビューでラップして、そのビューに入るデータを変更することはできますが、 できない そのようにしてコンテキストに追加します。