我不断获得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())
事情链中哪里出错了?
答案 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'),
)
等