未加载已更改的应用模板文件,以下是我的设置:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
# os.path.join(BASE_DIR, 'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
# list if you haven't customized them:
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.request',
],
},
},
]
模板结构的屏幕(Url是型号名称):
我错过了什么? (关键字app确实在installed_apps中)
编辑:尝试取消注释#dirs但它仍然无效。
这可能会让事情变得混乱(在设置之上):
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
如果我删除这一行,则会给出502error。(nginx)
编辑2:
如果我将BASE_DIR更改为:BASE_DIR = os.path.dirname(os.path.abspath( file ))
然后它开始阅读模板但是从PROJECT而不是app模板文件(django_project / django_project / templates / admin)是否可以更改它以便从app目录中读取?
答案 0 :(得分:3)
这是一个简单的设置,告诉Django模板引擎加载 每个安装的templates子目录中的模板 应用程序( APP_DIRS :True):
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'APP_DIRS': True,
'DIRS': []
},
]
DIRS 列表允许您添加Django搜索模板的其他文件夹
Django建议为每个应用整理这样的模板: django_project / app / templates / app /
在您的情况下: django_project / keyword / templates / keyword /
这是您的最终架构:
django_project
├── keyword
│ ├── migrations
│ ├── static
│ ├── templates
│ │ └── keyword
│ │ ├── admin
│ │ │ ├── Url
│ │ │ │ ├── base_site.html
│ │ │ │ └── change_list.html
│ │ │ └── base_site.html
│ │ ├── base.html
│ │ ├── embeds.html
│ │ └── index.html
│ ├── __init__.py
│ ├── tests.py
│ ├── models.py
│ ├── forms.py
│ └── views.py
├── django_project
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
由于模板引擎搜索每个 app / templates / ,因此在应用视图中,您可以定义模板的相对路径。
例如:
render(request, 'keyword/admin/base_site.html', context)
答案 1 :(得分:1)
试试这个:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'templates/admin'),
os.path.join(BASE_DIR, 'templates/Url'),
],
这样,Django也知道要查看templates
文件夹的子目录。