在Django中将项目目录用作模板目录会是一个坏主意吗?

在Django中将项目目录用作模板目录会是一个坏主意吗?,django,templates,Django,Templates,不要误解我的意思,我不是说把我的HTML放在settings.py文件旁边,而是在TEMPLATE\u DIR列表中添加项目目录(其中确实包含settings.py文件),这样我就可以通过命名“app/TEMPLATE/file.HTML”来调用任何模板 我只是想知道为什么Django没有提供模板名称空间。它迫使您: 创建一个与所有应用程序分开的模板目录,然后为每个应用程序创建一个目录,并将HTML放入其中 在每个应用程序目录中创建一个模板目录,并使用应用程序名称在其中创建另一个目录,然后将HT

不要误解我的意思,我不是说把我的HTML放在settings.py文件旁边,而是在
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文件混为一谈。然而,我想知道第三方应用程序在这种情况下会有什么反应。它会导致安全问题吗?