与this post相关,我希望从一个Django视图中填充多个HTML页面。这和我刚才提到的链接之间的区别是,我不希望它是基于编程的。我有我的模板上的链接,如“报告”和其他特定于公司的类别。如果用户单击reports链接,我希望将其带到一个新页面,该页面将显示报表。这些数据都是相互关联的,所以我最初假设我将/应该对所有这些数据使用相同的视图。然而,当我开始写这篇文章时,我开始怀疑是否应该对所有的页面使用单独的视图。总页数不应超过3-4页,这取决于我如何划分类别。
所以,TL;博士:我是应该对模板中的每个HTML页面使用单独的视图,还是应该/可以使用一个单独的视图来填充站点上的所有不同页面,即使大多数数据来自相同的来源?
发布于 2016-03-10 12:56:00
使用基于类的视图的一个可能的解决方案是创建一个基本视图类,该类将收集公共上下文数据,然后根据需要对特定的数据和模板进行扩展。实际上,基类不必是View
的扩展,ContextMixin
扩展就足够了。
基类应该如下所示:
class BaseContextMixin(ContextMixin):
def get_context_data(self, **kwargs):
context_data = super(BaseContextMixin, self).get_context_data(**kwargs)
common_data_1 = ...
context_data["common_key_1"] = common_data_1
common_data_2 = ...
context_data["common_key_2"] = common_data_2
...
return context_data
然后,可以按以下方式实现这些视图:
class MyFirstView(TemplateView, BaseContextMixin):
template_name = "mir/my_first_template.html"
def get_context_data(self, **kwargs):
context_data = super(MyFirstView, self).get_context_data(**kwargs)
context_data["my_special_key"] = my_special_data
return context_data
class MySecondView(TemplateView, BaseContextMixin):
template_name = "mir/my_second_template.html"
def get_context_data(self, **kwargs):
context_data = super(MySecondView, self).get_context_data(**kwargs)
context_data["my_special_key_2"] = my_special_data_2
return context_data
这样既可以避免冗余代码,又可以使结构保持简单。
发布于 2016-03-10 11:27:48
我建议使用单独的视图,除非您希望在整个过程中具有类似的格式结构,那么也许您只需要使用一个视图。即使这样,您也可以使用具有类似HTML结构的单独视图。这取决于您希望如何构造文档。
https://stackoverflow.com/questions/35925391
复制