Динамический URL – это адрес страницы веб-ресурса, который генерируется динамически на сервере, в момент поступления запроса от пользователя.
В отличие от статических URL-адресов, которые всегда фиксированы и указывают на конкретные файлы на сервере, динамические URL-адреса меняются в зависимости от параметров запроса.
Пример:
about/ всегда будет отображать страницу "О нас".articles/<int:article_id>/ может отображать разные страницы со статьями, в зависимости от номера статьи. На основе этого параметра сервер может динамически сгенерировать содержимое страницы, предоставляя информацию о конкретной статье из базы данных.Преимущества динамических 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 с определенным представлением из-за несоответствия типа данных ожидаемому.