I am new to Django and just follow the Django official document, but here is a problem.
I create a new Django project with
Django 1.8.2 + 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
most of these are created automatically, which i modified are as follows:
templates/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),
]
main/views.py
from django.shortcuts import render_to_response
def hello(request):
return render_to_response('hello.html', locals())
and click run and visit localhost:8080, here are results:
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']
if I change the views.py as
from django.http import HttpResponse
def hello(request):
return HttpResponse("hello world")
it runs correctly.
I think it may caused by the template path, here is the settings.py, generated automatically without modification:
"""
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'),
)
The Django template language is Django's own template system. Until Django 1.8 it was the only built-in option available. It's a good template library even though it's fairly opinionated and sports a few idiosyncrasies.
Django with Bootstrap. Bootstrap is a framework which is used to create user interface in web applications. It provides css, js and other tools that help to create required interface. In Django, we can use bootstrap to create more user friendly applications.
Your problem is with your settings. You currently have:
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
This is how you set up template directories in Django 1.7.x and below. In Django 1.8.x, change your TEMPLATES [] to read like this:
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',
],
},
},
]
Thank you for being so thorough with your question. Good luck!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With