首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从单个视图为多个模板提供服务(还是应该使用多个视图?)

从单个视图为多个模板提供服务(还是应该使用多个视图?)
EN

Stack Overflow用户
提问于 2016-03-10 19:22:17
回答 2查看 3.4K关注 0票数 5

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

所以,TL;博士:我是应该对模板中的每个HTML页面使用单独的视图,还是应该/可以使用一个单独的视图来填充站点上的所有不同页面,即使大多数数据来自相同的来源?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-10 20:56:00

使用基于类的视图的一个可能的解决方案是创建一个基本视图类,该类将收集公共上下文数据,然后根据需要对特定的数据和模板进行扩展。实际上,基类不必是View的扩展,ContextMixin扩展就足够了。

基类应该如下所示:

代码语言:javascript
复制
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

然后,可以按以下方式实现这些视图:

代码语言:javascript
复制
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

这样既可以避免冗余代码,又可以使结构保持简单。

票数 6
EN

Stack Overflow用户

发布于 2016-03-10 19:27:48

我建议使用单独的视图,除非您希望在整个过程中具有类似的格式结构,那么也许您只需要使用一个视图。即使这样,您也可以使用具有类似HTML结构的单独视图。这取决于您希望如何构造文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35925391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档