我可以更改基于类的视图的模板搜索行为吗?

Posted

技术标签:

【中文标题】我可以更改基于类的视图的模板搜索行为吗?【英文标题】:Can I change the template search behavior of class based views? 【发布时间】:2013-12-03 14:55:06 【问题描述】:

我有一个名为事务的应用程序。在这个应用程序中,我有一个名为 BatchFile 的模型。在我的views.py 文件中,我继承了ListView(以及其他)。默认行为是 django 认为 batchfile_list.html 应该位于:

templates/transactions/batchfile_list.html

很好,但是文件夹越来越拥挤。我可以将“模板/事务/批处理文件”添加到 TEMPLATE_DIRS,但是因为默认行为是查找 appname/modelname_type.html,这需要我将模板放入:

templates/transactions/batchfiles/transactions/batchfile_list.html

当我真的很喜欢它时:

templates/transactions/batchfiles/batchfile_list.html

或我的最佳结果:

templates/transactions/batchfiles/list.html  

是否有允许我执行此操作的配置选项?我知道可能没有完全达到最佳结果,但我希望至少获得稍微不太理想的结果。

谢谢!

【问题讨论】:

【参考方案1】:

最简单的方法是指定template_name

class MyListView(ListView):
    template_name = "transactions/batchfiles/list.html"

另一种方法是覆盖get_template_names

class MyListView(ListView):

    def get_template_names(self):
        return ["transactions/batchfiles/list.html"]

注意,它需要返回一个可能的模板位置列表。

在这种情况下,只有一个是所需的位置。

【讨论】:

感谢您的回复。我想避免明确命名所有模板。我正在查看 Multiple 和 SingleObjectTemplateResponseMixin 的代码,看起来名称创建不接受任何选项/配置。我对 Django 和 Python 还很陌生,有什么方法可以覆盖这两个 Mixins 中的 get_templates 吗? @user116510:您一次只能查看一个视图。因此,您可以创建自己的 mixin 并将其添加到所有基于类的视图中。或者,您可以使用 Django 的默认设置。毕竟,您要解决的问题只是一个“完整目录”,没有太多其他问题。 @simion-visser 好的,谢谢。我认为你是对的,我会坚持使用默认值。

以上是关于我可以更改基于类的视图的模板搜索行为吗?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在函数视图中调用基于类的通用视图

Django - 将变量从基于类的视图传递到模板

Django 基于类的视图中的字段派生模板名称

Django 基于类的视图是不是自动为模板分配表单值

如何为其他模板的表单显示和提交编写基于 Django 类的视图?

使用基于类的视图和 ajax 的 Django 应用程序?