我可以更改基于类的视图的模板搜索行为吗?
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 好的,谢谢。我认为你是对的,我会坚持使用默认值。以上是关于我可以更改基于类的视图的模板搜索行为吗?的主要内容,如果未能解决你的问题,请参考以下文章