Django无法找到我的模板

时间:2010-10-31 20:51:22

标签: python django django-templates django-views

我在Windows XP SP3上运行Python 2.6.1和Django 1.2.1。我正在使用JetBrains PyCharm 1.0来创建和部署我的Django应用程序。

我对Python相对缺乏经验,我开始通过跟随网站上的“编写你的第一个Django应用程序” - 民意调查应用程序来学习Django。我坚持part 3

当我为“编写你的第一个视图”添加简单的回调函数时,一切都很好。

当我开始写“实际做某事的观点”时,我遇到了障碍。

我按照说明修改了索引视图:

  1. 向views.py添加一个新方法(注意 - 模板已从'polls / index.html'准备就绪):
  2. 将index.html模板添加到site-templates/polls/文件夹
  3. 修改settings.py以指向site-templates文件夹
  4. 这是我的views.py中的代码:

    from django.template import Context, loader
    from polls.models import Poll
    from django.http import HttpResponse
    
    def index(request):
        latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
        t = loader.get_template('polls/index.html')
        c = Context({
            'latest_poll_list': latest_poll_list,
        })
        return HttpResponse(t.render(c))
    

    这是我的settings.py中的一行:

    TEMPLATE_DIRS = ('/site-templates/')
    

    但是我跑的时候仍然收到这条消息:

    TemplateDoesNotExist at /polls/
    polls/index.html
    Request Method: GET
    Request URL:    http://localhost:8000/polls/
    Django Version: 1.2.1
    Exception Type: TemplateDoesNotExist
    Exception Value:    
    polls/index.html
    

    在loader.py中抛出异常。我的调试设置如下所示:

    TEMPLATE_CONTEXT_PROCESSORS 
    ('django.core.context_processors.auth', 'django.core.context_processors.request')
    TEMPLATE_DEBUG  
    True
    TEMPLATE_DIRS   
    ('/site-templates',)
    TEMPLATE_LOADERS    
    ('django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader')
    

    我的目录结构如下所示:

    alt text

    我错过了什么? settings.py不正确吗?请指教。

6 个答案:

答案 0 :(得分:12)

我遇到了同样的问题。在我的情况下,错误是,该应用程序'不在项目settings.py文件的INSTALLED_APPS列表中。

错误引发错误消息,他们建议类似错误。

line 25, in get_template TemplateDoesNotExist(template_name, chain=chain)
django.template.exceptions.TemplateDoesNotExist: authControll/index.html

settings.py - >应用程序定义

INSTALLED_APPS = [
    ...,
    'authControll'
]

答案 1 :(得分:3)

您必须在TEMPLATE_DIRS设置中使用绝对路径。

方便的事情,在设置的顶部插入:

import os
DIRNAME = os.path.abspath(os.path.dirname(__file__))

然后,只要您使用路径,请使用os.path.join。 例如,您的TEMPLATE_DIRS将成为:

TEMPLATE_DIRS = (
    os.path.join(DIRNAME, 'site-templates/'),
)

答案 2 :(得分:3)

Django具有某种模式和理念。否则,请尝试使用相同的配置,否则您必须在Django中更改核心模式。

django中的模板模式如下:

polls/templates/polls/index.html

但是要使用它,您必须在配置中添加已安装的应用程序:

INSTALLED_APPS = [
'polls.apps.PollsConfig', #<-- Here this shoud be solve it
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',]

有关更多信息,请参见:

https://docs.djangoproject.com/en/3.0/intro/tutorial02/#activating-models

答案 3 :(得分:1)

我的错误只是定位错误:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'histories',
]

我的解决方案是:

INSTALLED_APPS = [
'histories',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

答案 4 :(得分:0)

这肯定会解决问题,而不是以上所有内容尝试仅添加settings.py下面的行:

TEMPLATE_DIRS = (
    "appname/templates",
)

答案 5 :(得分:-6)

http://docs.djangoproject.com/en/1.2/ref/templates/api/#loading-templates @zsquare答案的小修复:

import os
DIRNAME = os.path.abspath(os.path.dirname(__file__))

TEMPLATE_DIRS = ( DIRNAME+'/site-templates/' )