Динамические URL

Динамический URL – это адрес страницы веб-ресурса, который генерируется динамически на сервере, в момент поступления запроса от пользователя.

В отличие от статических URL-адресов, которые всегда фиксированы и указывают на конкретные файлы на сервере, динамические URL-адреса меняются в зависимости от параметров запроса.

Пример:

Преимущества динамических URL включают в себя более гибкую и масштабируемую архитектуру веб-приложений, возможность легко изменять и добавлять новый контент, а также улучшенную оптимизацию для поисковых систем благодаря уникальным и информативным URL.

Конвертеры

Конвертер в Django - это механизм, который определяет, как данные из URL должны быть извлечены, валидированы и преобразованы в Python-объекты для передачи в представления. Каждый конвертер задает правила соответствия для определенной части URL-шаблона, определяя ожидаемый формат данных с помощью регулярных выражений, и обеспечивает автоматическое извлечение и преобразование данных для обработки в представлениях.

Пример использования конвертера int в URL-шаблоне:

# urls.py (for app)
from django.urls import path
from . import views

urlpatterns = [
    path('articles/**<int:article_id>**/', views.article_detail, name='article_detail'),
]

В этом примере мы определяем URL-шаблон, который ожидает URL вида /articles/<число>/, где <число> является идентификатором статьи. Именно использование конвертера int перед именем переменной (article_id), указывает Django на то, что значение этой переменной должно быть целым числом.

**Аргумент name в URL-шаблоне используется для задания уникального имени маршрута. Это имя может быть использовано в других частях приложения для ссылок на этот маршрут, вместо жестко закодированных URL. Использование именованных маршрутов делает код более гибким и поддерживаемым. В примере выше name='article_detail' задает имя маршрута как "article_detail". Теперь, если в другом месте приложения вам нужно создать ссылку на детали статьи, вы можете использовать этот именованный маршрут, а не жестко прописывать URL.

Пример использования в шаблоне: <a href="{% url 'article_detail' article_id=123 %}">Подробности статьи</a>

Здесь {% url 'article_detail' article_id=123 %} создает URL для маршрута с именем "article_detail" с передачей значения article_id=123. Если в будущем маршрут изменится (например, добавится префикс), вам не нужно будет изменять все места, где вы используете этот URL вручную.*

Когда запрос с URL /articles/123/ поступает на сервер, Django автоматически извлекает значение 123 и преобразует его в целое число. Затем это значение передается в представление views.article_detail в качестве аргумента article_id. Таким образом, в представлении мы можем использовать это число для получения и отображения подробностей о статье с идентификатором 123.

Например:

# views.py
from django.http import HttpResponse, HttpRequest

def article_detail(request: HttpRequest, article_id: int) -> HttpResponse:
    return HttpResponse(f'Статья №{article_id}')

В случае, если в URL передается значение, которое не является целым числом, например /articles/abc/, Django выдаст ошибку 404 (страница не найдена), так как не сможет сопоставить этот URL с определенным представлением из-за несоответствия типа данных ожидаемому.

Зачем нужны конвертеры

  1. Параметризация URL: Конвертеры позволяют создавать динамические URL-шаблоны, которые могут принимать различные значения. Это делает URL более гибкими и масштабируемыми.