← Назад к вопросам

Что такое include в Django?

2.0 Middle🔥 211 комментариев
#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

include в Django

include() — это функция из модуля django.urls, которая позволяет подключать URL-конфигурацию из других приложений в главный файл urls.py проекта. Это ключевой механизм для организации маршрутизации в больших Django-приложениях.

Назначение и основной смысл

include() решает проблему масштабируемости: вместо того, чтобы определять все URL-паттерны в одном файле, вы разделяете их по приложениям. Каждое приложение может иметь свой urls.py, а главный файл просто подключает их через include().

Каждое Django-приложение (apps) обычно отвечает за одну часть функционала: пользователи, статьи, комментарии и т.д. Вместо создания монолитного файла urls.py с сотнями строк, вы создаёте маленькие файлы в каждом приложении.

Синтаксис и примеры

Вот структура проекта:

project/
  ├── project/urls.py       # Главный файл маршрутизации
  ├── articles/
  │   ├── urls.py           # URL-ы приложения articles
  │   └── views.py
  └── comments/
      ├── urls.py           # URL-ы приложения comments
      └── views.py

Типичный главный urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('articles/', include('articles.urls')),
    path('api/comments/', include('comments.urls')),
]

Файл articles/urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.article_list, name='article_list'),
    path('<int:pk>/', views.article_detail, name='article_detail'),
    path('<int:pk>/edit/', views.article_edit, name='article_edit'),
]

Файл comments/urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.comment_list, name='comment_list'),
    path('<int:pk>/delete/', views.comment_delete, name='comment_delete'),
]

В результате генерируются эти URL-ы:

  • /articles/ → article_list
  • /articles/1/ → article_detail
  • /articles/1/edit/ → article_edit
  • /api/comments/ → comment_list
  • /api/comments/1/delete/ → comment_delete

Namespace для избежания конфликтов

Когда у вас несколько приложений, могут быть одинаковые имена view-функций. Для этого используется namespace — уникальный префикс имён маршрутов:

# project/urls.py
urlpatterns = [
    path('articles/', include(('articles.urls', 'articles'), namespace='articles')),
    path('blog/', include(('blog.urls', 'blog'), namespace='blog')),
]

Теперь в шаблонах вы можете использовать:

# В шаблоне
{% url 'articles:article_detail' pk=1 %}
{% url 'blog:article_detail' pk=1 %}

# В коде
from django.urls import reverse
url = reverse('articles:article_detail', kwargs={'pk': 1})

Преимущества include()

  • Модульность: каждое приложение независимо управляет своими URL-ами
  • Масштабируемость: легко добавлять новые приложения
  • Переиспользование: один urls.py может быть подключен несколько раз с разными префиксами
  • Чистота кода: главный urls.py остаётся компактным
  • Организация: разработчик быстро находит нужные маршруты в нужном приложении

Частая ошибка

Ошибка новичков — забыть добавить trailing slash или неправильно настроить namespace:

# Неправильно — без namespace, может быть конфликт имён
path('articles/', include('articles.urls'))

# Правильно
path('articles/', include(('articles.urls', 'articles'), namespace='articles'))

include() — это основа организации URL-ов в любом среднем и крупном Django-проекте. Правильное использование этого инструмента делает код чище, понятнее и проще для поддержки.