2017-04-15 27 views
-1

我是django的新手。怎样才能把这个默认的django变成单独的视图和模板?Django初学者 - 如何区分视图和模板?

<!DOCTYPE html> 
 
<html lang="en"><head> 
 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
 
    <meta name="robots" content="NONE,NOARCHIVE"><title>Welcome to Django</title> 
 
    <style type="text/css"> 
 
    html * { padding:0; margin:0; } 
 
    body * { padding:10px 20px; } 
 
    body * * { padding:0; } 
 
    body { font:small sans-serif; } 
 
    body>div { border-bottom:1px solid #ddd; } 
 
    h1 { font-weight:normal; } 
 
    h2 { margin-bottom:.8em; } 
 
    h2 span { font-size:80%; color:#666; font-weight:normal; } 
 
    h3 { margin:1em 0 .5em 0; } 
 
    h4 { margin:0 0 .5em 0; font-weight: normal; } 
 
    table { border:1px solid #ccc; border-collapse: collapse; width:100%; background:white; } 
 
    tbody td, tbody th { vertical-align:top; padding:2px 3px; } 
 
    thead th { 
 
     padding:1px 6px 1px 3px; background:#fefefe; text-align:left; 
 
     font-weight:normal; font-size:11px; border:1px solid #ddd; 
 
    } 
 
    tbody th { width:12em; text-align:right; color:#666; padding-right:.5em; } 
 
    #summary { background: #e0ebff; } 
 
    #summary h2 { font-weight: normal; color: #666; } 
 
    #explanation { background:#eee; } 
 
    #instructions { background:#f6f6f6; } 
 
    #summary table { border:none; background:transparent; } 
 
    </style> 
 
</head> 
 

 
<body> 
 
<div id="summary"> 
 
    <h1>It worked!</h1> 
 
    <h2>Congratulations on your first Django-powered page.</h2> 
 
</div> 
 

 
<div id="instructions"> 
 
    <p> 
 
    Next, start your first app by running <code>python manage.py startapp [app_label]</code>. 
 
    </p> 
 
</div> 
 

 
<div id="explanation"> 
 
    <p> 
 
    You're seeing this message because you have <code>DEBUG = True</code> in your Django settings file and you haven't configured any URLs. Get to work! 
 
    </p> 
 
</div> 
 
</body></html>

这是我的django样本结构:

~/django_sample/ 
    manage.py 
    django_sample/ 
     settings.py 
     urls.py 
     views.py 
     ... 
     templates/ 
     index.html 
在我urls.py

from django.conf.urls import include, url 
from django.contrib import admin 

    from . import views 

    urlpatterns = [ 
     # ex:/
     url(r'^$', views.index, name='index'), 
     url(r'^admin/', admin.site.urls), 
    ] 

以我view.py

from django.shortcuts import render 

def index(request): 
    context = {} 
    return render(request, 'index.html', context) 

index.html与上面的HTML和CSS代码一样。

当我在我的终端上运行它:

$ python manage.py runserver 
Performing system checks... 

System check identified no issues (0 silenced). 
April 15, 2017 - 14:27:34 
Django version 1.11, using settings 'django_sample.settings' 
Starting development server at http://127.0.0.1:8000/ 
Quit the server with CONTROL-C. 

但是,当我访问我的浏览器的网站,我得到这个错误:

Internal Server Error:/
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py", line 41, in inner 
    response = get_response(request) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/var/www/html/projects/django_sample/django_sample/views.py", line 5, in index 
    return render(request, 'index.html', context) 
    File "/usr/local/lib/python2.7/dist-packages/django/shortcuts.py", line 30, in render 
    content = loader.render_to_string(template_name, context, request, using=using) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 67, in render_to_string 
    template = get_template(template_name, using=using) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 25, in get_template 
    raise TemplateDoesNotExist(template_name, chain=chain) 
TemplateDoesNotExist: index.html 
[15/Apr/2017 14:29:07] "GET/HTTP/1.1" 500 82522 

任何想法,我应该怎么做是正确的?

编辑:

在我的settings.py:

import os 

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
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.11/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = '3bpqy#_n6ew(h52$6a_tfog4%[email protected]$ox(s!+fuwd49n' 

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

ALLOWED_HOSTS = [] 


# Application definition 

INSTALLED_APPS = [ 
    'polls.apps.PollsConfig', 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
] 

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

ROOT_URLCONF = 'django_sample.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 = 'django_sample.wsgi.application' 


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

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


# Password validation 
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
] 


# Internationalization 
# https://docs.djangoproject.com/en/1.11/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.11/howto/static-files/ 

STATIC_URL = '/static/' 

回答

1

两件事情来检查:

首先,确保Django期待在你的应用程序目录中的模板。在您的settings.py文件,看看这样的事情:

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'OPTIONS': { 
      'context_processors': [ 
       # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this 
       # list if you haven't customized them: 
       'django.contrib.auth.context_processors.auth', 
       'django.template.context_processors.debug', 
       'django.template.context_processors.i18n', 
       'django.template.context_processors.media', 
       'django.template.context_processors.static', 
       'django.template.context_processors.tz', 
       'django.contrib.messages.context_processors.messages', 

      ], 
      'loaders' : (
       ('django.template.loaders.cached.Loader', (
        'django.template.loaders.filesystem.Loader', 
        'django.template.loaders.app_directories.Loader', 
       )), 
      ) 
     }, 
    }, 
] 

(重要的一个是app_directories.Loader)

然后,也settings.py中,请确保您的应用程序,“django_sample “列在INSTALLED_APPS

+0

谢谢。我没有在我的设置(见我的编辑上面)。在settings.py中的下落我应该加入? – laukok

+0

'加载器'位于TEMPLATES列表下,与'context_processors' –

+0

的级别相同,您的代码似乎存在一些错误。 – laukok