🐛 Типичные ошибки: Django intro

⚡ Топ-3 ошибки

  1. Забыть добавить приложение в INSTALLED_APPS → шаблоны и модели не найдены.
  2. Не подключить urls.py приложения через include() → 404 на всех маршрутах.
  3. Запустить python manage.py runserver не из папки с manage.py → ошибка «manage.py not found».

Ошибка 1: Приложение не в INSTALLED_APPS

Симптом: шаблоны не находятся, модели не мигрируются, сигналы не работают.

# Неправильно — 'myapp' не добавлено
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    # myapp отсутствует!
]

# Правильно
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # добавлено
]

Ошибка 2: Не подключен urls.py приложения

Симптом: все URL приложения возвращают 404, даже если view написано корректно.

# Неправильно — include() не вызван
# config/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    # маршруты myapp не подключены
]

# Правильно
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),  # подключено
]

Ошибка 3: manage.py запущен не из нужной директории

Симптом: ошибка python: can't open file '...\manage.py': No such file or directory.

# Неправильно — вы находитесь не там
C:\Users\user> python manage.py runserver

# Правильно — перейти в папку с manage.py
C:\Users\user> cd myproject
C:\Users\user\myproject> python manage.py runserver

Ошибка 4: Не создан файл myapp/urls.py

Симптом: ModuleNotFoundError: No module named 'myapp.urls'

Django создаёт приложение с набором файлов, но urls.py не входит в стандартный набор. Его нужно создать вручную:

# myapp/urls.py — создать вручную
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

Ошибка 5: Неправильный путь к шаблону

Симптом: TemplateDoesNotExist: myapp/index.html

# Неправильная структура папок
myapp/templates/index.html          ← без папки myapp внутри

# Правильная структура
myapp/templates/myapp/index.html    ← с папкой myapp внутри

В view использовать путь с префиксом:

# Неправильно
return render(request, 'index.html', context)

# Правильно
return render(request, 'myapp/index.html', context)

Ошибка 6: Не выполнены миграции

Симптом: предупреждение при запуске сервера «You have X unapplied migration(s)». Adminка может не работать.

# Применить начальные миграции
python manage.py migrate

Это нужно сделать сразу после создания проекта, даже если собственных моделей ещё нет — Django сам создаёт таблицы для встроенных приложений (auth, sessions, admin).

Ошибка 7: Забыта точка в startproject

Симптом: появляется лишняя директория config/config/ внутри проекта.

# Неправильно — создаётся лишняя вложенность
django-admin startproject config

# Структура (нежелательная):
config/
└── config/
    ├── settings.py
    └── ...

# Правильно — точка означает "в текущей папке"
django-admin startproject config .

# Структура (правильная):
config/
├── settings.py
└── ...
manage.py

Ошибка 8: Отладочная информация в production

Симптом: подробные ошибки Django видны пользователям на боевом сервере.

# settings.py — для разработки (по умолчанию)
DEBUG = True
ALLOWED_HOSTS = []

# settings.py — для production (ОБЯЗАТЕЛЬНО изменить)
DEBUG = False
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
⚠️ Проверить по документации Django Security checklist перед запуском в production: docs.djangoproject.com/deployment/checklist