嵌套模板目录结构的原因是啥?

Posted

技术标签:

【中文标题】嵌套模板目录结构的原因是啥?【英文标题】:What is the reason for nested template directory structure?嵌套模板目录结构的原因是什么? 【发布时间】:2019-02-13 07:46:47 【问题描述】:

django 模板文件夹requires 创建一个包含应用程序名称的子文件夹,然后包含模板文件。为什么这是必要的,当python manage.py collectstatic 可以在遍历所有目录时推断此信息?看起来很多余。

【问题讨论】:

原因有两个:一是组织和具有可维护的结构,二是防止名称冲突。假设您有 2 个同名模板,您可以在 render() 中使用 dir/template_name 来防止名称冲突 【参考方案1】:

首先,Django 并不需要这个特定的文件夹结构来让模板工作,它只是一个已建立的模式。而且,当然,它有一个基本原理,正如official doc 中所指出的那样:

模板命名空间

现在我们或许可以不用直接放置模板了 在 polls/templates 中(而不是创建另一个 polls 子目录), 但这实际上是个坏主意。 Django会选择第一个 模板它会找到名称匹配的模板,并且如果您有一个模板 在不同的应用程序中使用相同的名称,Django 将无法 区分它们。我们需要能够将 Django 指向 正确的一个,确保这一点的最简单方法是对它们进行命名空间。 也就是说,通过将这些模板放在另一个名为 应用程序本身。

具体案例可以参考this question或that another。

简而言之,通过遵循此模式,您可以将模板组织成 2 组:

    与您的特定站点或项目相关的模板可以位于TEMPLATES['DIRS'] 设置所指向的目录中; 与特定应用程序相关的模板,如果您使您的应用程序可插入,则可以按原样提供,应该位于'./appname/templates/appname/' 中(并且TEMPLATES['APP_DIRS'] 必须为True)。这样可以避免此文件夹内的文件与外部文件之间的名称冲突。

【讨论】:

以上是关于嵌套模板目录结构的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

创建一个目录结构(带有嵌套路由 + 漂亮的 url,...)

Grunt 项目推荐的目录结构是啥

新特性速递树表格结构由单层 TR 改为 TR-TD-TABLE 层级嵌套!

在 C# 中存储和比较目录的最有效数据结构是啥?

从嵌套字典结构列表(具有两个级别)创建数据框的 Pythonic 方法是啥?

微擎目录结构介绍