django&"TemplateDoesNotExist"错误

Dan*_*ell 16 django django-templates

我有一个似乎常见的初学者问题.

我在我的第一个django项目上工作,当我设置我的视图时,我收到"TemplateDoesNotExist"错误.我现在花了很多时间在这上面 - 我知道它上面有很多主题,但到现在为止我没有任何帮助.

我希望我能提供所需的所有信息,以便高级django用户可以直接看到我做错了什么.

即时通讯使用开发服务器.和Windows 7和sqlite3.

这是我得到的错误:

TemplateDoesNotExist at /skates/
allsk8s.html
Request Method: GET
Request URL:    http://127.0.0.1:8000/skates/
Django Version: 1.4.3
Exception Type: TemplateDoesNotExist
Run Code Online (Sandbox Code Playgroud)

在settings.py中我设置了TEMPLATE_DIRS,如下所示:

TEMPLATE_DIRS = (
    r'H:/netz2/skateprojekt/templates/',
)
Run Code Online (Sandbox Code Playgroud)

模板加载器看起来像这样:

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)
Run Code Online (Sandbox Code Playgroud)

这是我的看法:

from django.shortcuts import render_to_response
from django.template import RequestContext
from sk8.models import Sk8

def AllSk8s(request):
    skates      = Sk8.objects.all().order_by('name')
    context     = {'skates':skates}
    return render_to_response('allsk8s.html', context, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

它应链接到allsk8s.html - 它看起来像它但文件无法找到,虽然它肯定在正确的文件夹中.但正如你所看到的:

Template-loader postmortem
Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
H:\netz2\skateprojekt\templates\allsk8s.html (File does not exist)
Run Code Online (Sandbox Code Playgroud)

这是我的urls.py的一部分

    urlpatterns = patterns('',
         url(r'^admin/', include(admin.site.urls)),
         (r'^skates/$', 'sk8.views.AllSk8s'),
 )
Run Code Online (Sandbox Code Playgroud)

这是系统路径:

H:\netz2\skateproject\templates
Run Code Online (Sandbox Code Playgroud)

并在模板文件夹中是一个名为allsk8s.html的文件,据我所知 - 这应该工作.我真的希望有人可以帮助我,因为这是我第二次遇到这样的问题,我无法弄清楚问题.

提前谢谢danielll


编辑:

我试着把它添加到我的settings.py:

import os
DIRNAME = os.path.abspath(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud)

并将我的TEMPLATE_DIRS更改为:

TEMPLATE_DIRS = (
    os.path.join(DIRNAME, r'H:/netz2/skateprojekt/templates/'),
)
Run Code Online (Sandbox Code Playgroud)

因为我读它会有所帮助 - 但它仍然返回相同的错误 - 所以我再次改回来.(


编辑:

我也检查过,当我输入一个wront url时,它会抛出这个错误:

Using the URLconf defined in skateproject.urls, Django tried these URL patterns, in this order:
^admin/
^skates/$
Run Code Online (Sandbox Code Playgroud)

所以冰鞋网址应该在那里 - 但不能"解决" - 我不明白:(


编辑:

今天我发现了一些新东西,Template-loader postmortem说它还会检查这些目录:

Using loader django.template.loaders.app_directories.Loader:
C:\Python27\lib\site-packages\django\contrib\auth\templates\allsk8s.html (File does not exist)
C:\Python27\lib\site-packages\django\contrib\admin\templates\allsk8s.html (File does not exist)
Run Code Online (Sandbox Code Playgroud)

所以我在那里移动了我的模板文件并收到了一个新的错误 - 通过将我的html文件从ansi转换为utf8和tada来解决这个问题 - 它有效.不幸的是,我不能让这个文件夹中的模板文件导致它不属于项目的一部分.当我将文件移回原来的位置时我回到了原来的错误:(

Har*_*GUL 13

解决此问题的方法之一是您应该在settings.py中添加应用.我假设你有一个名为发票的应用程序然后解决这个问题

INSTALLED_APPS = [
'invoice.apps.InoviceConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Run Code Online (Sandbox Code Playgroud)


Dan*_*ell 9

神的圣洁母亲!我解决了!

我不知道为什么 - 但这是"TemplateDoesNotExist"错误的解决方案(在我的情况下).

我的文件夹结构是这样的:

netz2> skateproject

到目前为止我在skateproject中有模板文件夹,在settings.py中我指向了这个目录.当我试图在firefox中打开页面时,这扔了模板不存在错误.

因为skateproject是项目文件夹,我有一个文件夹sk8 - 这是我正在处理的应用程序,我试图执行.解决方案非常简单.

我不得不在应用程序的子目录中移动模板.看起来像这样

netz2> skateproject> sk8> templates

现在它有效!

因此,如果您遇到同样的问题,请确保您的模板文件夹不在项目的根目录中,但是您正在处理的应用程序的子目录 - 并将此路径添加到settings.py Template_dirs

它在我的例子中看起来像这样:

TEMPLATE_DIRS = (
    r'H:/netz2/skateprojekt/sk8/templates/',
)
Run Code Online (Sandbox Code Playgroud)


Jer*_*emy 8

如果有人尝试使用Django 1.7和Python 3或更高版本,我会这样做:

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'mysite_dir/templates')]

myfile_dir可以是mysite下的任何目录.文件结构将是这样的:

manage.py
mysite/  
  mysite/  
  mysite_dir/  
  templates/  
    ____init__.py  
    models.py  
    #...
  another_app/  
Run Code Online (Sandbox Code Playgroud)

这个答案可能看似重复,但我知道我总是喜欢从最近的日期看到的东西...所以希望这会有所帮助