0

私のプロジェクト Django アプリの 1 つに、日付ベースのオブジェクトのクラスベースのジェネリック ビューを変更するカスタム ミックスインがあります。

class MyCoolMixin(ArchiveIndexView):
    """
    ArchiveIndexView mixin with my customizations
    """
    allow_empty = True
    make_object_list = True
    date_field = 'pub_date'

    # Pass in some custom request vars

    def get(self, request, *args, **kwargs):
        # Cool stuff here
        # including getting
        # my context data
        return self.render_to_response(context)

class MyNewArchiveIndexView(MyCoolMixin, ArchiveIndexView):
    pass

それはうまくいきます。実際、非常に優れているため、この特定のアプリだけでなく、サイト全体に適用したいと考えています. ただし、Django 1.4 のプロジェクト レイアウトでは、サイト全体のクラスベースのジェネリック ビュー オーバーライド mixin をどこに置くべきかわかりません。ルートのviews.py?

/path/to/myproject/myproject/views.py

そして、その変更された汎用ビューをすべてのアプリにインポートして、それが利用可能であることを確認する必要がありますか?

さらに、私のさまざまなアプリ モデルでは、さまざまな日付フィールドがあります (場合によってはpub_dateまたはstart_dateです)。一般的なビューのdate_field設定をオーバーライドできるように、それをどのようにミックスインに渡す必要があるか考えていますか?

ベスト プラクティスを探していますが、新しいクラス ベースのジェネリック ビュー + ミックスインのベスト プラクティスは見たことがありません。

4

1 に答える 1

1

モンキー パッチを適用することもできますが、それは「ベスト プラクティス」ではなく、ハックです。

ベスト プラクティスは、デフォルトの ArchiveIndexView を使用する各 URL を自分の URL でオーバーライドすることです。詳しく書いたので参考になるかもしれません。

于 2012-11-20T21:05:20.923 に答える