0

背景の詳細​​、投稿はモデルであり、基本的にブログを作成しようとしています。これは、このビデオで示されているものと同じブログです。

コードは次のとおりです。

from django.views.generic import ListView, DetailView

from models import Post


class PublishedPostsMixin(object):
    def get_queryset(self):
        queryset = super(PublishedPostsMixin, self).get_queryset()
        return queryset.filter(published=True)


class PostListView(PublishedPostsMixin, ListView):
    # PostListView takes default template name as `post_list.html`,
    # as list was the name it was assigned.
    model = Post
    template_name = 'blog/post_list.html'                            


class PostDetailView(PublishedPostsMixin, DetailView):
    model = Post
    template_name = 'blog/post_detail.html'                          

ご覧のとおり、PublishedPostsMixinはオブジェクトから継承されていますが、 がどのように機能しているのかsuper()。何が起こっているのか理解できる場合は、少し混乱しているので、順を追って説明していただけますか。

4

1 に答える 1

3

トリックは何をするかにsuperあります。これは動的呼び出しです。MRO (メソッド解決順序) で次のクラスを参照します。(Adrián がコメントで述べているように) mixin は他のクラスと組み合わせてのみ使用されることになっているため、MRO の間には常に何かが存在します。PublishedPostsMixinobject

の詳細についてはsuper、レイモンド ヘッティンガーの記事「スーパーと見なされるスーパー」を参照してください (Python 3 の構文を念頭に置いて書かれていますが、原則は同じであることに注意してください)。

于 2013-05-29T16:41:19.860 に答える