2

日付ベースのオブジェクトとフォームの両方を表示するクラスベースのビューを作成する最良の方法は何ですか? ユース ケースは、今日のオブジェクトを表示し、連絡先フォームを備えたサイト インデックス ページ ビューです。

最初に、TodayArchiveView とContactFormViewをサイト インデックス ページ ビューのミックスインとして使用することを考えました。ただし、TodayArchiveView は BaseDateListView を継承し、ContactFormView は ProcessFormView を継承しています。ProcessFormView と BaseDateListView の両方が get() を実装し、最終的にはまったく異なるデータで render_to_response を呼び出します。(これについての私の考えが正しいかどうかさえわかりません。私はまだ多重継承について頭を悩ませています。)

次に、2 つの get の機能を組み合わせた独自の get() を作成することを考えました。これは、私が知る限り、これらの機能は衝突しないためです。その結果、次のようになりました。

def get(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)

    self.date_list, self.object_list, extra_context = self.get_dated_items()
    context = self.get_context_data(form=form, object_list=self.object_list,
        date_list=self.date_list)
    context.update(extra_context)
    return self.render_to_response(context)

これは正しいアプローチですか?

より大きな質問として、どのミックスインを相互に使用できるかをどうやって知るのでしょうか? 両方のクラスが get() を実装していることを認識するために、django のソースにアクセスする必要がありました。

4

1 に答える 1

2

あなたのフォームはオブジェクトに関連していますか? 説明からはそうではないようです。お問い合わせフォームは、ある種のサイドバーまたは同様のサイト全体 (または少なくともセクション全体) の要素にあると推測しています。

それが正しければ、ビューにフォームをまったく含めません。代わりに、タグまたはインクルードまたは同様の方法を使用して、個別に定義されたテンプレートを配置します。

于 2012-02-10T10:47:15.197 に答える