嵌套模板目录结构的原因是啥?
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,...)
新特性速递树表格结构由单层 TR 改为 TR-TD-TABLE 层级嵌套!