如何在站点范围内应用/提供我修改过的基于Django类的通用视图mixin?

时间:2012-11-20 19:44:47

标签: python django generics view

在我的一个项目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_date start_date )。知道如何将其传递到mixin中,以便我可以覆盖通用视图 date_field 设置吗?

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

1 个答案:

答案 0 :(得分:1)

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

最佳做法是覆盖使用默认ArchiveIndexView的每个网址。我已经wrote about that in details也许它会有所帮助。