2015-06-17 259 views
7

我是Django的新手,只是按照Django的官方文檔,但這裏有一個問題。django錯誤TemplateDoesNotExist

我創建

Django的1.8.2新的Django項目+ PyCharm 4.5.1 +的Python 3.4.3 +的Windows 8.1

- mysite 
    - main 
     - migrations 
      __init__.py 
     __init__.py 
     admin.py 
     models.py 
     tests.py 
     views.py 
    - mysite 
     __init__.py 
     settings.py 
     urls.py 
     wsgi.py 
    - templates 
     hello.html 
    db.sqlite3 
    manage.py 

大部分是自動生成的,我改性如下:

模板/ hello.html的

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title>Django test</title> 
</head> 
<body> 
hello world! 
</body> 
</html> 

的mysite/urls.py

from django.conf.urls import include, url 
from django.contrib import admin 
from main.views import hello 

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^hello/$', hello), 
] 

主/ views.py

from django.shortcuts import render_to_response 

def hello(request): 
    return render_to_response('hello.html', locals()) 

,並單擊運行和訪問本地主機:8080,這裏有結果:

TemplateDoesNotExist at /hello/ 
hello.html 
Request Method: GET 
Request URL: http://127.0.0.1:8000/hello/ 
Django Version: 1.8.2 
Exception Type: TemplateDoesNotExist 
Exception Value:  
hello.html 
Exception Location: C:\Python34\lib\site-packages\django\template\loader.py in get_template, line 46 
Python Executable: C:\Python34\python.exe 
Python Version: 3.4.3 
Python Path:  
['C:\\Users\\kant\\Desktop\\code\\PycharmProjects\\mysite', 
'C:\\Users\\kant\\Desktop\\code\\PycharmProjects\\mysite', 
'C:\\Windows\\SYSTEM32\\python34.zip', 
'C:\\Python34\\DLLs', 
'C:\\Python34\\lib', 
'C:\\Python34', 
'C:\\Python34\\lib\\site-packages'] 

如果我改變views.py如

from django.http import HttpResponse 

def hello(request): 
    return HttpResponse("hello world") 

它運行正常。

我認爲它可以通過模板路徑造成的,這裏是settings.py,無需修改自動生成:

""" 
Django settings for mysite project. 

Generated by 'django-admin startproject' using Django 1.8.2. 

For more information on this file, see 
https://docs.djangoproject.com/en/1.8/topics/settings/ 

For the full list of settings and their values, see 
https://docs.djangoproject.com/en/1.8/ref/settings/ 
""" 

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
import os 

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


# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = 'p(fs&6e2kg6d3%0txc+9o=(!*8fzt8w5l6neuqer*m9qictsl$' 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = True 

ALLOWED_HOSTS = [] 


# Application definition 

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'main', 
) 

MIDDLEWARE_CLASSES = (
    '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', 
    'django.middleware.security.SecurityMiddleware', 
) 

ROOT_URLCONF = 'mysite.urls' 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

WSGI_APPLICATION = 'mysite.wsgi.application' 


# Database 
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 


# Internationalization 
# https://docs.djangoproject.com/en/1.8/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 

# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.8/howto/static-files/ 

STATIC_URL = '/static/' 

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'), 
) 

回答

8

你的問題是與您的設置。您目前有:

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'), 
) 

這是您如何在Django 1.7.x和更低版本中設置模板目錄。在Django的1.8.x的,改變你的模板[]像這樣寫着:

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      os.path.join(BASE_DIR, 'templates'), 
     ], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

謝謝你對你的問題那麼徹底。祝你好運!

1

嘗試把模板子目錄中:

<project>/<app>/templates/<app>/hello.html 

return render_to_response('<app>/hello.html', locals()) 

如果您想訪問以內的模板10,那麼你必須指定DIRSTEMPLATES

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR, 'templates'),], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 
+0

它的設置 - 在Django 1.8模板目錄中已經移到了TEMPLATES []中。 – FlipperPA