Django 找不到应用模板
Posted
技术标签:
【中文标题】Django 找不到应用模板【英文标题】:Django Can't Find App Templates 【发布时间】:2015-04-04 19:17:20 【问题描述】:我正在学习here 找到的官方 django 1.7 教程。一切都很顺利,除了 django 找不到应用程序的模板。它会找到我放在 workspace/mysite/templates 下但没有放在 workspace/mysite/polls/templates 下的模板。
workspace 是我的主目录中的一个文件夹,用于保存我的所有 Web 项目。
我的路径是~workspace/mysite/
项目结构是
`workspace
|
mysite
|
db.sqlite3 - manage.py - mysite - mysite_env - polls - templates`
为简洁起见,我将仅列出每个文件夹的内容:
db.sqlite3 - 是一个文件 manage.py - 是一个文件 mysite - 是项目文件夹 mysite_env - 是 virtualenv 文件夹 polls - 是应用程序文件夹,包含一个文件目录结构,其中包含未被拾取的模板。打开目录中的结构是templates/polls/index.html templates - 是项目模板目录。它正在被 django 拾取在我的 mysite/settings.py 我已经指定了
`TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]`
我尝试将路径添加到 polls/templates 文件夹,但这也不起作用。
polls/views.py 的索引设置为:
`def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
template = loader.get_template('/polls/index.html')
context = RequestContext(request,
'latest_question_list': latest_question_list,
)
return HttpResponse(template.render(context))`
实际 polls/templates/polls/index.html 包含:
`% if latest_question_list %
<ul>
% for question in latest_question_list %
<li><a href="/polls/ question.id /"> question.question_text </a>a></li>
% endfor %
</ul>
% else %
<p>No Polls are available.</p>
% endif %`
最后但同样重要的是,polls/urls.py 包含此正则表达式,用于匹配 /polls/ 的索引:
`#ex: /polls/
url(r'^$', views.index, name='index'),`
我得到的具体错误是:
`TemplateDoesNotExist at /polls/
/polls/index.html
Request Method: GET
Request URL: http://127.0.0.1:8000/polls/
Django Version: 1.7.4
Exception Type: TemplateDoesNotExist
Exception Value:
/polls/index.html
Exception Location: /home/jeremiah/workspace/mysite/mysite_env/lib/python3.4/site-packages/django/template/loader.py in find_template, line 136
Python Executable: /home/jeremiah/workspace/mysite/mysite_env/bin/python
Python Version: 3.4.0
Python Path:
['/home/jeremiah/workspace/mysite',
'/home/jeremiah/workspace/mysite/mysite_env/lib/python3.4',
'/home/jeremiah/workspace/mysite/mysite_env/lib/python3.4/plat-x86_64-linux-gnu',
'/home/jeremiah/workspace/mysite/mysite_env/lib/python3.4/lib-dynload',
'/usr/lib/python3.4',
'/usr/lib/python3.4/plat-x86_64-linux-gnu',
'/home/jeremiah/workspace/mysite/mysite_env/lib/python3.4/site-packages']
Server time: Wed, 4 Feb 2015 18:27:56 -0800`
它给出的回溯是:
`nvironment:
Request Method: GET
Request URL: http://127.0.0.1:8000/polls/
Django Version: 1.7.4
Python Version: 3.4.0
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Template Loader Error:
Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
Using loader django.template.loaders.app_directories.Loader:
Traceback:
File "/home/jeremiah/workspace/mysite/mysite_env/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/jeremiah/workspace/mysite/polls/views.py" in index
9. template = loader.get_template('/polls/index.html')
File "/home/jeremiah/workspace/mysite/mysite_env/lib/python3.4/site-packages/django/template/loader.py" in get_template
144. template, origin = find_template(template_name, dirs)
File "/home/jeremiah/workspace/mysite/mysite_env/lib/python3.4/site-packages/django/template/loader.py" in find_template
136. raise TemplateDoesNotExist(name)
Exception Type: TemplateDoesNotExist at /polls/
Exception Value: /polls/index.html`
有人可以帮我解决这个问题吗?我一直试图弄清楚什么是错误的方式太久了。欢迎任何基于当前公认实践的想法。
谢谢。
【问题讨论】:
【参考方案1】:从模板名称中删除第一个 /
斜杠。应该是:
template = loader.get_template('polls/index.html')
【讨论】:
天啊,/手腕!你知道我解决这个问题多长时间了吗?在所有文件中查找拼写错误,检查我的 python 路径、django 路径、sys 路径。大声笑,哦,我真的不敢相信。感谢您的帮助。以上是关于Django 找不到应用模板的主要内容,如果未能解决你的问题,请参考以下文章