РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
279 of 818 menu

Конвертер slug

Конвертер slug в Django применяется в маршрутизации URL-адресов для захвата и проверки строк, которые могут быть использованы в качестве идентификаторов ресурсов. Он соответствует строкам, состоящим из символов ASCII (буквы, цифры), дефисов и знаков подчеркивания. Конвертер slug автоматически проверяет, что переданная строка соответствует формату slug, и передает её в представление в виде аргумента. Это удобно для создания человеко-читаемых URL-адресов, например, для статей блога или категорий товаров.

Синтаксис

path('url/<slug:variable_name>/', view_function, name='some_name')

Где slug - это тип конвертера, а variable_name - имя переменной, которая будет передана в функцию представления. Маршрут будет соответствовать любому URL-адресу, где сегмент состоит только из букв, цифр, дефисов или знаков подчеркивания.

Пример

Рассмотрим пример использования конвертера slug в файле urls.py для отображения страницы статьи по её слагу:

from django.urls import path from myapp.views import article_detail urlpatterns = [ path('articles/<slug:article_slug>/', article_detail, name='article-detail'), ]

В этом примере любой URL-адрес, начинающийся с articles/ и содержащий строку, соответствующую формату slug, будет передан в функцию представления article_detail с аргументом article_slug.

Теперь рассмотрим функцию представления, которая использует полученный слаг для поиска статьи в базе данных:

from django.shortcuts import render, get_object_or_404 from myapp.models import Article def article_detail(request, article_slug): article = get_object_or_404(Article, slug=article_slug) return render(request, 'article_detail.html', {'article': article})

В этом коде мы используем полученный слаг для поиска статьи с соответствующим полем slug. Если статья не найдена, возвращается ошибка 404.

Пример

Рассмотрим использование конвертера slug в сочетании с другими конвертерами, например, для создания иерархических URL-адресов категорий:

from django.urls import path from myapp.views import category_detail urlpatterns = [ path('categories/<slug:category_slug>/', category_detail, name='category-detail'), path('categories/<slug:parent_slug>/<slug:child_slug>/', category_detail, name='subcategory-detail'), ]

В этом примере мы определяем два маршрута: один для категории верхнего уровня, а другой - для подкатегории. Оба используют конвертер slug для захвата соответствующих сегментов URL-адреса.

Функция представления для обработки таких маршрутов может выглядеть следующим образом:

from django.shortcuts import render, get_object_or_404 from myapp.models import Category def category_detail(request, parent_slug=None, child_slug=None): if child_slug: category = get_object_or_404(Category, slug=child_slug, parent__slug=parent_slug) elif parent_slug: category = get_object_or_404(Category, slug=parent_slug, parent__isnull=True) else: category = None return render(request, 'category_detail.html', {'category': category})

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

Смотрите также

  • функция path,
    которая определяет маршрут с использованием конвертеров
  • конвертер str,
    который соответствует любой непустой строке без разделителей
  • конвертер int,
    который соответствует целым числам
  • конвертер uuid,
    который соответствует универсальным уникальным идентификаторам
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить