与this post相关,我想从单个Django视图中填充多个HTML页面。这与我刚提到的链接之间的区别在于,我不希望它以编程方式为基础。我的模板上有链接,如" Reports"和其他公司特定的类别。如果用户点击“报告”链接,我想将他们带到一个新页面,向他们展示报告。这些数据都是相互关联的,所以我最初假设我会/应该对所有数据使用相同的视图。当我开始写这篇文章时,我开始想知道我是否应该为所有页面使用单独的视图。总共不应超过3-4页,具体取决于我希望如何拆分类别。
所以 TL; DR :我应该为模板中的每个HTML页面使用单独的视图,还是应该/可以使用单个视图来填充网站上的所有各个页面,即使大多数数据来自相同的来源?
答案 0 :(得分:3)
使用基于类的视图的可能解决方案是创建一个基本视图类,该类将收集公共上下文数据,然后根据特定数据和模板的需要对其进行扩展。实际上,基类不必是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
这样可以避免冗余代码,同时可以保持结构简单
答案 1 :(得分:0)
我建议使用单独的视图,除非你想在整个过程中使用类似的格式化结构,否则你可能只使用一个视图。但即便如此,您也可以使用具有类似HTML结构的单独视图。这实际上取决于您希望如何构建文档。