0

在我的一个项目 Django 应用程序中,我有一个自定义 mixin,用于修改基于日期的对象的基于类的通用视图:

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_datestart_date)。知道如何将它传递到 mixin 中,以便我可以覆盖通用视图date_field设置吗?

我正在寻找一种最佳实践,但我还没有看到新的基于类的通用视图 + mixins。

4

1 回答 1

1

你可以猴子补丁......但这不是“最佳实践”,它是一个黑客。

最好的做法是用你的覆盖使用默认 ArchiveIndexView 的每个 url。我已经详细写过了,也许它会有所帮助。

于 2012-11-20T21:05:20.923 回答