2014-10-28 75 views
5

我无法在Django 1.7中呈现任何html页面。我的 '的index.html' 是 'project/seatalloc/templates/index.html' 和我的project/seatalloc/views.py view.py样子:Django模板不存在错误,虽然它显示'文件存在'

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

项目/工程/ 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)), 
) 

Template loader

我曾试图按照DOC umentation严格的,但不知道如果Django检测到该文件,为什么我得到TemplateDoesNotExist在/ seatalloc /错误。我是Django的新手,有人可以帮忙。

+0

看起来像'setalloc'是一个应用程序。您实际上并不需要告诉'template_dirs'它的模板,就像您在高亮显示的行下可以看到的那样,它已经被应用程序目录加载器找到。 'template_dirs'用于非应用程序模板,通常位于项目根目录中,而不是位于应用程序中。 – Ngenator 2014-10-28 13:00:38

+0

我想出了问题:我之前提供的URL是url(r'^ $',views.index,name ='index'),我将它更改为url(r'^ index $',views.index, name ='index'),这个+将templates_dir移动到项目根目录解决它。感谢所有帮助 – 2014-10-28 18:06:06

回答

2

尝试这样,

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

我应该在哪里定义PROJECT_ROOT。在settings.py中定义它给我提供了无效的语法 – 2014-10-28 09:20:16

+0

@code_enthu已更新 – 2014-10-28 09:23:09

+1

自1.8开始弃用:https://docs.djangoproject.com/en/1.8/ref/settings/#template-dirs – Wtower 2015-05-06 12:07:22

-1

首先不要在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") 
+0

谢谢!实际上我从settings.py中删除了整个TEMPLATE_DIRS(..)代码。问题出在模板目录的路径上。将它放到项目目录中后,事情就起作用了 – 2014-10-28 09:38:08

+0

嘿,你建议为index.html页面工作,例如:http://127.0.0.1:8000/seatalloc /但是对于任何其他页面http://127.0.0.1:8000/seatalloc/index或http://127.0.0.1:8000/seatalloc/detail它显示404错误。所有.html文件位于同一个目录 – 2014-10-28 09:55:53

+3

-1中,用于在较新的渲染上推荐一个较旧的render_to_response。 – 2014-10-28 10:28:32

27

如果 - 因为你的情况 - 你得到一个TemplateDoesNotExist错误和调试页面状态“文件存在”旁边有问题的模板,这通常(?总是)是指这个模板是指另外一个模板可以”不被发现。

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

+0

+1,这对我有帮助。 “TemplateDoesNotExist错误”是在index.html上存在但被base扩展的。包含缺少模板的html。有趣的是,“TemplateDoesNotExist错误”在我登录管理员并尝试查看网站之后才出现,因为缺少的包含与登录相关。 – curtisp 2015-08-14 19:19:52

+0

如果不是这样的话,不能解决它!谢谢 – ketanbhatt 2016-03-12 07:07:40

+0

这是问题!谢谢 – guinunez 2017-04-03 19:52:28