【问题标题】:Django class based generic views and inheritance基于 Django 类的通用视图和继承
【发布时间】:2012-10-27 04:01:21
【问题描述】:

所以我正在编写这个应用程序并使用通用视图对象 ListView 和 ObjectView。

我已经覆盖了这两种情况的 get_context_data 方法,以便能够在两种情况下添加相同的额外上下文(与对象无关)。

现在我有两个类,一个扩展 Listview,另一个扩展 DetailView,两者都使用相同的 get_context_data 方法。

虽然这工作得很好,但看到它真的很痛苦,是否有一个父类我可以覆盖 get_context_data 将使 ListView 和 DetailView 继承新的 get_context_data?这样看起来会更好:)

谢谢。

X

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    如果您想要覆盖 get_context_data 的方式相同,我会使用 mixin。

    class CommonMixinExample(object):
    
        def get_context_data(self, **kwargs):
            # do stuff in here
            return super(CommonMixinExample, self).get_context_data(**kwargs)
    
    class YourListView(CommonMixinExample, ListView):
        # other code
    
    class YourDetailView(CommonMixinExample, DetailView):
        # other code
    

    【讨论】:

    • 感谢您的回答,但我不明白为什么 mixin 应该从我试图为其编写视图的对象继承。如果我想使用 YourListView 或 YorDetailView 类来渲染其他对象怎么办?
    • 我的错误,我认为对象是指我的示例对象而不是实际的 python 对象,我现在明白了,我创建了 Mixin,它工作正常。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-12-04
    • 2019-07-30
    • 2011-10-04
    • 2012-02-21
    • 2016-08-06
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多