使用Django 1.8
我有两个同名的模板,
在base.html
/mysite/templates/base.html
和另一个来自位置相同名称(base.html)的应用
/mysite/app/templates/base.html
我的模板设置,
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',
],
},
},
]
视图
def home(request):
c = { name: 'myname', username: 'myusername'}
return render(request, 'base.html', c)
这会调用项目根目录中的“base.html”,但如何从app/template
目录中调用该模板。
感谢您的参考!
更新
我已将应用位置添加到模板dirs,
'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'app/templates')],
现在我的IDE显示了两个文件,仍然呈现了根base.html
。如何引用另一个模板?
更新: 修复了在应用模板级别添加一个目录的问题。
现在我的app模板目录结构如下所示,
mysite/app/templates/app/base.html
os.path.join(BASE_DIR, 'app/templates')
。
欢迎使用更高效的Django 1.8解决方案。
答案 0 :(得分:5)
使用您当前的目录结构,您不能 - 这样做可以让您稍后在INSTALLED_APPS
设置中按应用覆盖模板。惯例是使用更像的目录结构:
app1/templates/app1/base.html
app2/templates/app2/base.html
然后使用app1/base.html
或app2/base.html
来引用您想要的那个。
修改强>
更明确我的意思:您的项目结构可能如下所示:
mysite
- templates
- base.html
- manage.py (etc...)
- app
- models.py (etc...)
- templates
- app
- base.html
然后你可以使用base.html
获取第一个,app/base.html
获取另一个 - 相关的应用模板都打包在他们引用的应用程序中,但是是命名空间。
答案 1 :(得分:3)
在文件结构中创建额外级别是一种很好的做法。所以将模板放在templates/<app_name>/
文件夹中。然后,您可以使用templates/app1/base.html
和templates/app2/base.html
引用它们。