在Django中将项目目录用作模板目录会是一个坏主意吗?
不要误解我的意思,我不是说把我的HTML放在settings.py文件旁边,而是在在Django中将项目目录用作模板目录会是一个坏主意吗?,django,templates,Django,Templates,不要误解我的意思,我不是说把我的HTML放在settings.py文件旁边,而是在TEMPLATE\u DIR列表中添加项目目录(其中确实包含settings.py文件),这样我就可以通过命名“app/TEMPLATE/file.HTML”来调用任何模板 我只是想知道为什么Django没有提供模板名称空间。它迫使您: 创建一个与所有应用程序分开的模板目录,然后为每个应用程序创建一个目录,并将HTML放入其中 在每个应用程序目录中创建一个模板目录,并使用应用程序名称在其中创建另一个目录,然后将HT
TEMPLATE\u DIR
列表中添加项目目录(其中确实包含settings.py文件),这样我就可以通过命名“app/TEMPLATE/file.HTML”来调用任何模板
我只是想知道为什么Django没有提供模板名称空间。它迫使您:
创建一个与所有应用程序分开的模板目录,然后为每个应用程序创建一个目录,并将HTML放入其中
在每个应用程序目录中创建一个模板目录,并使用应用程序名称在其中创建另一个目录,然后将HTML放入其中
这并不理想,因为:
强制您在应用程序外部使用HTML。可插拔的功能到此为止
通过强制您创建一个冗余的目录树project\u dir/app\u name/template/appname
,违反了DRY,否则,如果您有多个名为'index.html
'的模板,您就要倒霉了
那么,仅仅将项目目录定义为模板目录来调用所有模板文件“app\u name/template/file.html”
,这是一个坏主意吗?若有,原因为何?你将如何做到干净?我个人使用app\u name/templates
作为应用程序相关模板,使用项目/模板作为全局模板。就我个人而言,我觉得这很有用,因为我真的很喜欢我的应用程序和项目之间的松散耦合,所以我倾向于保持它们的独立性
然而,django给了你选择的自由。如果您对自己的选择感到满意,我看不出有任何问题。您提出了一个有趣的论点,反对应用程序目录
模板加载器的工作方式。除了用模板污染应用程序的根目录外,我想不出会因此出什么问题
也许制作自己的模板加载器是值得研究的?你使用app\u目录
模板加载器吗?问题是,除非你把应用程序的模板放在<代码> AppyNoth/Stimult/AppMyNo./COD>中,否则模板加载程序会将应用程序的模板视为根目录。因此,例如,要使用my_app
的home.html
模板,您必须将其称为home.html
,而不是app_name/home.html
。正确。如果不使用app/temp/app
方案,名称冲突将很容易发生,除非您努力以不同的方式命名每个应用程序模板,或者您可以确保应用程序中存在generic.html
模板并将首先加载。但如果你就是这样滚的话,那也没什么害处!这有点像强类型vs弱类型的参数。你有可能和这个名字冲突@Yuji:你可以严格要求自己的工作方式,但迟早你会需要使用所谓的“可插拔应用”,然后问题就开始了。对不起,输入错误。很明显,我指的是wild上每个应用程序使用的相同布局,因此app\u name/template/app\u name
。假设我按照stackoverflow规则更正了我的答案吗?我考虑了一下,但我觉得如果使用root dir这样简单的方法奏效,那就太过分了。现在您是对的,您必须确保不会将HTML与Python文件混为一谈。然而,我想知道第三方应用程序在这种情况下会有什么反应。它会导致安全问题吗?