它在哪里寻找模板

时间:2014-03-31 14:46:41

标签: python django django-templates

我不断获得TemplateDoesNotExist

vidPal_project/
├── manage.py
├── templates
│   ├── base.html
│   └── index.html <--- the one I want
├── vidPal_project
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── viddy
    ├── __init__.py
    ├── admin.py
    ├── models.py
    ├── tests.py
    ├── urls.py
    └── views.py

settings.py

TEMPLATE_DIRS = '/templates/'

vidPal_project / urls.py

url(r'^$', 'viddy.views.home', name='home'),

viddy / views.py

def home(request):
    sent = 'hello'
    return render(request,'index.html', locals())

事情链中哪里出错了?

2 个答案:

答案 0 :(得分:3)

TEMPLATE_DIRS = '/templates/'替换TEMPLATE_DIRS = 'templates/'。第一个是绝对地址(请注意开头的/),它在root中查找模板文件夹,这是错误的。第二个是相对的,将查看当前文件夹 最好的方法是动态构建路径,如Björns的回答所述。

答案 1 :(得分:2)

TEMPLATE_DIRS期望绝对路径,而不是相对路径。如果您没有完全相同的设置,从开发转移到生产时,这可能是一个麻烦,所以这是一个巧妙的技巧。在settings.py

import os.path
PROJECT_DIR = os.path.dirname(__file__)
...

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_DIR, 'templates')
)

PROJECT_DIR将设置为settings.py的位置,因此在您的情况下,您可能必须将其设为os.path.join(PROJECT_DIR, '../templates')

这同样适用于项目中的其他绝对位置,即:

STATIC_ROOT = os.path.join(PROJECT_DIR, 'static_root')

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'),
)