x0x*_*x0x 3 python django templates
使用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',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
视图
def home(request):
c = { name: 'myname', username: 'myusername'}
return render(request, 'base.html', c)
Run Code Online (Sandbox Code Playgroud)
这会调用项目根目录中的"base.html",但是如何从app/template目录中调用模板.
谢谢你的参考!
更新:
我已将应用位置添加到模板目录中,
'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'app/templates')],
Run Code Online (Sandbox Code Playgroud)
现在我的IDE显示了两个文件,仍然base.html呈现了根.如何引用另一个模板?
更新:修复了在应用模板级别添加一个目录.
现在我的app模板目录结构如下所示,
mysite/app/templates/app/base.html
os.path.join(BASE_DIR, 'app/templates') 如果应用程序位于已安装的应用程序元组中,则不需要TEMPLATE DIR.
欢迎使用更高效的Django 1.8解决方案.
使用您当前的目录结构,您不能 - 这样就可以让您在以后的INSTALLED_APPS设置中通过应用覆盖模板.惯例是使用更像的目录结构:
app1/templates/app1/base.html
app2/templates/app2/base.html
Run Code Online (Sandbox Code Playgroud)
然后使用app1/base.html或app2/base.html引用你想要的那个.
编辑
为了更清楚我的意思:您的项目结构可能如下所示:
mysite
- templates
- base.html
- manage.py (etc...)
- app
- models.py (etc...)
- templates
- app
- base.html
Run Code Online (Sandbox Code Playgroud)
然后你可以使用base.html获取第一个并app/base.html获得另一个 - 相关的应用程序模板都打包在他们引用的应用程序中,但是是命名空间.