2

编写既显示基于日期的对象又显示表单的基于类的视图的最佳方法是什么?用例是一个站点索引页面视图,它既显示今天的对象,又具有联系表。

起初我想使用 TodayArchiveView 和ContactFormView作为我的站点索引页面视图的 mixin。但是,TodayArchiveView 继承自 BaseDateListView,ContactFormView 继承自 ProcessFormView。ProcessFormView 和 BaseDateListView 都实现了 get() 并最终使用非常不同的数据调用 render_to_response ,所以我认为这不起作用,因为即使我可以通过 super 调用两者,也会返回哪个?(我什至不确定我对此的想法是否正确;我仍在考虑多重继承。)

然后我想编写我自己的 get() 来结合两个 get 的功能,因为据我所知,它们的功能不会冲突。所以最终看起来像:

def get(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)

    self.date_list, self.object_list, extra_context = self.get_dated_items()
    context = self.get_context_data(form=form, object_list=self.object_list,
        date_list=self.date_list)
    context.update(extra_context)
    return self.render_to_response(context)

这是正确的方法吗?

作为一个更大的问题,你怎么知道哪些 mixin 可以相互使用?我必须去 django 源代码才能意识到这两个类都在实现 get()。

4

1 回答 1

2

您的形式是否与对象相关?从描述看来它不是,我猜您的联系表单位于某种侧边栏或类似的站点范围(或至少是部分范围)元素中。

如果这是正确的,我根本不会在视图中包含该表单;相反,我会使用标签或包含或类似方法来放置单独定义的模板。

于 2012-02-10T10:47:15.197 回答