Я пытаюсь изучить Django CRUD из этого руководства: https://www.javatpoint.com/django-crud-пример Моя версия Django — 2.1.7, а моя IDE — VisualStudio. Когда я запускаю проект, на всех страницах появляется ошибка. ошибка пришла ниже.
TemplateDoesNotExist at /index
show.html
Request Method: GET
Request URL: http://localhost:52322/index
Django Version: 2.1.7
Exception Type: TemplateDoesNotExist
Exception Value:
show.html
Exception Location: E:\Django_Try\DjangoWebProject5\DjangoWebProject5\env\lib\site-packages\django\template\loader.py in get_template, line 19
Python Executable: E:\Django_Try\DjangoWebProject5\DjangoWebProject5\env\Scripts\python.exe
Python Version: 3.6.6
Python Path:
['E:\\Django_Try\\DjangoWebProject5\\DjangoWebProject5',
'',
'E:\\Django_Try\\DjangoWebProject5\\DjangoWebProject5',
'E:\\Django_Try\\DjangoWebProject5\\DjangoWebProject5\\env\\Scripts\\python36.zip',
'C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python36_64\\DLLs',
'C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python36_64\\lib',
'C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python36_64',
'E:\\Django_Try\\DjangoWebProject5\\DjangoWebProject5\\env',
'E:\\Django_Try\\DjangoWebProject5\\DjangoWebProject5\\env\\lib\\site-packages']
Server time: Tue, 5 Mar 2019 22:43:24 +0000
Я добавляю свои URL-адреса ниже:
from django.conf.urls import include, url
from django.contrib import admin
from django.urls import path
from employee import views
urlpatterns = [
path('index', views.show),
path('admin/', admin.site.urls),
path('emp', views.emp),
path('show',views.show),
path('edit/<int:id>', views.edit),
path('update/<int:id>', views.update),
path('delete/<int:id>', views.destroy),
]
Вид:
from django.shortcuts import render, redirect
from employee.forms import EmployeeForm
from employee.models import Employee
# Create your views here.
def emp(request):
if request.method == "POST":
form = EmployeeForm(request.POST)
if form.is_valid():
try:
form.save()
return redirect('/show')
except:
pass
else:
form = EmployeeForm()
return render(request,'index.html',{'form':form})
def show(request):
employees = Employee.objects.all()
return render(request,"show.html",{'employees':employees})
def edit(request, id):
employee = Employee.objects.get(id=id)
return render(request,'edit.html', {'employee':employee})
def update(request, id):
employee = Employee.objects.get(id=id)
form = EmployeeForm(request.POST, instance = employee)
if form.is_valid():
form.save()
return redirect("/show")
return render(request, 'edit.html', {'employee': employee})
def destroy(request, id):
employee = Employee.objects.get(id=id)
employee.delete()
return redirect("/show")
параметр:
"""
Django settings for DjangoWebProject5 project.
Generated by 'django-admin startproject' using Django 1.9.1.
For more information on this file, see
https://docs.djangoproject.com/en/1.9/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.9/ref/settings/
"""
import os
import posixpath
# 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.9/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '65ccf984-10e5-4c13-ab4d-9c0cf30e8b04'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
# Add your apps here to enable them
'employee',
'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.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'DjangoWebProject5.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 = 'DjangoWebProject5.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.9/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.9/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.9/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.9/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = posixpath.join(*(BASE_DIR.split(os.path.sep) + ['static']))
структура проекта полностью аналогична учебному пособию, изображение приведено ниже:
https://www.javatpoint.com/django/images/django-crud-example-project-structure.png
Скрин моей структуры:
https://drive.google.com/open?id=1xRB0xcnkplZ4ktiyEblkMVeyJ1SpATDc
Я думаю, что ошибка говорит, что шаблон не существует, но шаблоны существуют. Пожалуйста, сообщите мне, что не так в моем приложении.
Это сообщение об ошибке совершенно ясно: ваш /index маршрут (и, следовательно, ваш show вид) запрашивает шаблон show.html, который Django не может найти. Итак, как говорит @Atcrank, нам нужно видеть, где вы храните свои шаблоны, и как настроены параметры вашего шаблона.
Я добавил свои файлы. Но show.html выходит.
спасибо, но на связанном снимке экрана не показаны файлы html или каталоги templates, поэтому мы не знаем, где находится шаблон, что, очевидно, является ключевым. Однако с вашими текущими настройками шаблона Django будет искать только в папках с именем templates, которые находятся внутри одного из ваших приложений. (Похоже, пока это ваше единственное приложение.) Можно использовать папку employee верхнего уровня, но тогда вам нужно заполнить массив templates в настройках DIRS с помощью TEMPLATES.
Я добавил свою файловую структуру. Пожалуйста, дайте мне знать ваше мнение.






В вашем файле settings.py каталог шаблона должен быть назначен как:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['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',
],
},
},
]
Точно так же убедитесь, что шаблоны имеют следующую структуру:
|-app_name
|-templates
|-app_name
|-show.html
|-index.html and so on
Я добавил в настройки своего каталога, но все равно получаю сообщение об ошибке, в котором говорится, что страница не найдена. Кроме того, я добавил скриншот своей файловой структуры. Пожалуйста, дайте мне знать, что вы думаете.
Извините, я не могу получить доступ к вашему скриншоту ваших каталогов, я думаю, это из-за блоков на моей стороне. У Санипа есть (я думаю) правильный ответ. Мой мета-совет, поскольку у меня были некоторые трудности с изучением того, как Django находит и использует шаблоны, заключается в том, чтобы продолжать пробовать что-то новое; есть так много неправильных способов сделать что-то. Например, вы можете создать набор файлов 'show.html', которые просто содержат описание каталога, в котором они находятся, и поместить их в каждый каталог вашего проекта. например в корневой папке проекта:
# show.html
<p> project root </p>
в вашей новой папке «шаблоны»:
# employees/templates/show.html
<p> this one is in employees/templates/show.html
Вам не нужно этого делать, но если что-то не получается, ничего страшного. Это занимает 5 минут, вы узнаете, где ищет Джанго, и сбросите настройки.
Ваш шаблон «show.html» должен находиться в подкаталоге «templates» вашего приложения «employees». В моем файле settings.py есть «DIRS»: ['/templates/'] и «APP_DIRS»: True. В результате Django ищет папку с именем «шаблоны» во всех каталогах моих приложений. Когда я обращаюсь к шаблону в views.py, Django ищет во всех моих приложениях (начиная с начала списка) /templates/. Вы можете иметь подкаталоги в одном каталоге шаблонов, если хотите, и это может быть хорошим способом гарантировать, что вы случайно не вызовете неправильный шаблон для своих следующих приложений.
Документы: https://docs.djangoproject.com/en/2.1/ref/settings/#std:setting-TEMPLATES-DIRS
Не могли бы вы включить views.py, вашу запись в settings.py для ШАБЛОНОВ и каталог внутри вашего проекта, в котором находятся ваши шаблоны? Если Django не может найти шаблон, значит, он ищет не в том месте, где вы ожидаете.