我在两个地方都有index.html。一个位于/templates/index.html,另一个位于/myapp/templates/index.html
在我有的设置中:
TEMPLATES = [
dict(BACKEND='django.template.backends.django.DjangoTemplates', DIRS=[
os.path.join(BASE_DIR, 'templates'),
os.path.join(BASE_DIR, 'myapp/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',
]
}),
]
在/settings.py
urlpatterns = [
url(r'^myapp/(?P<param>\w+)/', include('myapp.urls', namespace='myapp', app_name='myapp'), name='myapp'),
]
在myapp / urls.py
中urlpatterns = [
url(r'^$', views.test, name='test'),
]
在myapp / views.py
中def test(request, param):
response = TemplateResponse(request, 'index.html', {})
return response
如何从当前应用中明确获取index.html,而不是从根模板文件夹中获取?我试过
response = TemplateResponse(request, 'myapp/index.html', {})
但引发错误:TemplateDoesNotExist
如果我在os.path.join(BASE_DIR,&#39; room / templates&#39;)之后放了os.path.join(BASE_DIR,&#39; templates&#39;),那就行了。没有其他方法可以优先在项目中搜索模板,具体取决于当前的应用程序,名称空间等?
答案 0 :(得分:2)
将模板放在templates/<app_name>/
或<app_name>/templates/<app_name>/
中。它们将由Django自动找到。
Django将查看主模板文件夹templates/<app_name>/
和<app_name>/templates/<app_name>/
之后。
然后在你看来:
response = TemplateResponse(request, '<app_name>/index.html', {})