0

所以背景细节,Post 是一个模型,我基本上是在尝试创建一个博客,与本视频中显示的博客相同。

这是代码:

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,您应该阅读 Raymond Hettinger 的文章Super被认为是超级(注意它是用 Python 3 语法编写的,但原理是相同的)。

于 2013-05-29T16:41:19.860 回答