gpt4 book ai didi

python - 从单个 View 提供多个模板(或者我应该使用多个 View ?)

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:27 24 4
gpt4 key购买 nike

this post相关,我想从单个 Django View 填充多个 HTML 页面。这与我刚才提到的链接之间的区别是,我不希望它以编程方式为基础。我的模板上有链接,例如“报告”和其他公司特定的类别。如果用户单击“报告”链接,我想将他们带到一个新页面,向他们显示报告。这些数据都是相互关联的,所以我最初假设我会/应该对所有这些数据使用相同的 View 。不过,当我开始写这篇文章时,我开始怀疑我是否真的应该为所有页面使用单独的 View 。总页数不应超过 3-4 页,具体取决于我希望如何划分类别。

所以 TL;DR:我应该为模板中的每个 HTML 页面使用单独的 View ,还是应该/可以使用单个 View 来填充网站上的所有不同页面,即使大多数数据来自相同的来源?

最佳答案

使用基于类的 View 的一种可能解决方案是创建一个基础 View 类,该类将收集公共(public)上下文数据,然后根据特定数据和模板的需要对其进行扩展。其实基类不一定是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

然后可以按如下方式实现 View :

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

这样可以避免冗余代码,同时可以保持结构简单

关于python - 从单个 View 提供多个模板(或者我应该使用多个 View ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35925391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com