Cla*_*ash 6 django django-templates
我的django应用程序上的模板有以下文件夹结构:
templates/
app/
model1/
model1_form.html
model2/
model2_form.html
Run Code Online (Sandbox Code Playgroud)
假设我使用的是model1和一个通用的ListView,现在它只搜索templates/app/model1_form.html.无论如何我可以告诉django他还应该搜索app /子文件夹吗?我不想手动设置模板名称和路径(template_name="templates/app/model1/model1_form.html").
在settings.py,我有:
import os.path
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (
BASE_PATH+'/templates/',
)
Run Code Online (Sandbox Code Playgroud)
这是我的看法:
class HousesListView(ListView):
model = House
context_object_name = "house_list"
Run Code Online (Sandbox Code Playgroud)
提前致谢!
Bob*_*ork 22
其他答案在当时是正确的,但对于现在遇到这种情况的人来说,这就是Django 1.8+的完成方式
默认情况下,Django现在在app文件夹中查找模板.这'APP_DIRS': True,在以下TEMPLATES设置中表示:
TEMPLATES = [
{
...
'DIRS': ['templates'],
'APP_DIRS': True,
...
},
]
Run Code Online (Sandbox Code Playgroud)
正如其他答案所示,您仍应使用appname/templates/appname/model1_form.html命名空间模板
(更多信息:https://docs.djangoproject.com/en/1.8/intro/tutorial03/#write-views-that-actually-do-something在标题为'template namespacing'的框中)
最后检查:确保您使用的应用程序在INSTALLED_APPS元组中,因为这是我遇到的问题.
Chr*_*att 20
您需要添加django.template.loaders.app_directories.Loader到TEMPLATE_LOADERS(如果不是的话).
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
Run Code Online (Sandbox Code Playgroud)
然后,更改您的文件夹结构,以便在app目录中有一个"templates"文件夹:
- <project_root>
- app
- templates
- model1
- model2
Run Code Online (Sandbox Code Playgroud)
或者正确地命名模型,以便它们不会意外地与其他应用程序名称冲突:
- <project_root>
- app
- templates
- app
- model1
- model2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10483 次 |
| 最近记录: |