【问题标题】:Django Template does not exist error, although it shows 'file exists'Django 模板不存在错误,尽管它显示“文件存在”
【发布时间】:2014-12-23 14:51:47
【问题描述】:

我无法在 Django 1.7 中呈现任何 html 页面。我的 'index.html' 在 'project/seatalloc/templates/index.html' 中,而我在 project/seatalloc/views.py 中的 view.py 看起来像:

 def index(request):
       return render(request, 'index.html', dirs=('templates',)) 

project/project/settings.py 已设置模板目录:

TEMPLATE_DIRS = (
    '/Users/Palak/Desktop/academics/sem3/cs251/lab11/project/seatalloc/templates',

)

urls.py:

urlpatterns = patterns('',
    url(r'^seatalloc/', include('seatalloc.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

我已尝试严格遵循文档,但无法弄清楚 Django 是否检测到该文件,为什么我在 /seatalloc/ 处收到 TemplateDoesNotExist 错误。我是 Django 新手,有人可以帮忙吗?

【问题讨论】:

  • 看起来setalloc 是一个应用程序。您实际上不需要告诉template_dirs 它的模板,正如您在突出显示的行下方看到的那样,应用程序目录加载器已经找到了它。 template_dirs 用于非应用模板,通常位于项目根目录中,而不是在应用中。
  • 我发现了问题:我之前提供的 url 是 url(r'^$', views.index, name='index'),我把它改成了 url(r'^index $', views.index, name='index'), this + 将 templates_dir 移动到项目根目录解决了它。感谢大家的帮助

标签: python django django-templates


【解决方案1】:

如果 - 与您的情况一样 - 您收到 TemplateDoesNotExist 错误,并且调试页面在相关模板旁边显示“文件存在”,这通常(总是?)意味着该模板引用了另一个无法找到的模板。

在您的情况下, index.html 包含一个声明 ({% extends %}, {% include %}, ... ) 引用另一个 Django 无法找到的模板。不幸的是,从 Django 1.8.3 开始,调试页面总是命名基本模板,而不是 Django 找不到的那个。

【讨论】:

  • +1,这对我有帮助。 “TemplateDoesNotExist 错误”在 index.html 上,它存在但由 base.html 扩展,其中包含缺少模板。有趣的是,“TemplateDoesNotExist 错误”直到我登录 Admin 并尝试查看站点后才出现,因为缺少的包含与登录相关。
  • 这就是问题所在!谢谢
【解决方案2】:

这样试试,

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (
     os.path.join(BASE_DIR, 'templates/'),
)

【讨论】:

【解决方案3】:

首先不要在settings.py的模板目录中使用静态路径(固定路径),使用:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

TEMPLATE_DIRS = (
      BASE_DIR +'/Templates',


  )

模板目录应该在项目目录中,即manage.py文件所在的目录。

在 view.py 中使用 render_to_response 而不仅仅是 render

return  render_to_response("index.html") 

【讨论】:

  • 谢谢!实际上,我从我的 settings.py 中删除了整个 TEMPLATE_DIRS (..) 代码。问题在于模板目录的路径。将其放入项目目录后,一切正常
  • 嘿,您的建议适用于 index.html 页面,例如:127.0.0.1:8000/seatalloc,但对于任何其他页面 127.0.0.1:8000/seatalloc/index127.0.0.1:8000/seatalloc/detail,它会显示 404 错误。所有的 .html 文件都在同一个目录中
  • -1 用于推荐较旧的 render_to_response o 而不是较新的渲染。
猜你喜欢
  • 2012-03-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多