问题描述
我在使用 Django 路由查找位于应用程序级别的模板时遇到问题。也就是说,除非我将它们放在根项目级目录中,否则不会呈现应用程序级目录中的模板。但对我来说,这种架构的问题在于,如果我有两个或更多应用程序都有一个名为 home.html
的文件,我如何从项目级别的模板文件夹中解决该问题,以免它们发生冲突.
错误信息
Template-loader postmortem
Django tried loading these templates,in this order:
Using engine django:
django.template.loaders.filesystem.Loader: C:\Users\HP\Desktop\DEV\PYTHON\DEVELOPMENT\WILLIAM-vincent-PROJECT\django-begin\templates\index.html (Source does not exist)
我希望 Django 搜索 /templates/posts
和 /templates/pages
文件夹以获取文件。而是尝试直接从 templates
文件夹中获取文件。如果我将 HTML 文件直接放入 /templates/
文件夹,则会发生冲突,因为应用程序具有相似的文件名
项目目录结构
|__my-project
|__manage.py
|__pages
|__posts
|__templates
|__pages
| |__home.html
| |__about.html
|__posts
|__home.html
|__about.html
我希望每个应用都有自己的 home.html
和 about.html
INSTALLED_APPS = [
'posts.apps.PostsConfig','pages.apps.PagesConfig','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates','Dirs': [os.path.join(BASE_DIR,'templates')
],'APP_Dirs': True,'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},]
解决方法
您的模板需要通过以下方式保存:
ProjectName/AppName/Templates/AppName/Template.html
因此,如果您的项目名为 DjangoProject
,而您的应用程序名为 DjangoApp
,则为:DjangoProject/DjangoApp/Templates/DjangoApp/Template.html
这对于您在项目中启动的任何应用都是一样的。
编辑:
目前您的项目目录中有一个 templates
文件夹。这是错误的。
应用目录中的每个应用都需要一个 templates
文件夹。
所以my-project/pages/templates/pages
和my-project/posts/templates/posts
不是my-project/templates/