【问题标题】:What is a good way to write a django class-based view that both shows a date-based object and a form?编写一个既显示基于日期的对象又显示表单的基于 django 类的视图的好方法是什么?
【发布时间】:2012-03-01 13:46:21
【问题描述】:

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

起初我想使用 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()。

【问题讨论】:

  • 在实验中,我已经确认这种方法有效。从概念上讲,仍然想知道它是否正确。

标签: django django-forms django-class-based-views


【解决方案1】:

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

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

【讨论】:

  • 你说得对,它不是索引视图固有的,而是侧边栏的一部分。包含标签很有意义。
猜你喜欢
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 2016-12-05
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
相关资源
最近更新 更多