Динамический 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 с определенным представлением из-за несоответствия типа данных ожидаемому.