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

register_converter

Функция register_converter применяется для регистрации пользовательских конвертеров в системе маршрутизации Django. Она позволяет разработчику определять собственные типы данных, которые могут использоваться в параметрах URL, и автоматически преобразовывать их из строки в нужный тип Python. Функция принимает два обязательных аргумента: класс конвертера и строку с именем типа.

Синтаксис

from django.urls import register_converter register_converter(converter_class, type_name)

Параметры функции:

converter_class - класс конвертера, который определяет методы to_python и to_url для преобразования значений.

type_name - строка с именем типа, под которым конвертер будет доступен в функциях path и re_path.

Пример . С пользовательским конвертером

Давайте создадим конвертер для обработки дат в формате год-месяц-день:

from django.urls import register_converter, path from datetime import datetime class DateConverter: regex = r'[0-9]{4}-[0-9]{2}-[0-9]{2}' def to_python(self, value): return datetime.strptime(value, '%Y-%m-%d').date() def to_url(self, value): return value.strftime('%Y-%m-%d') register_converter(DateConverter, 'date')

После регистрации конвертера, мы можем использовать его в маршрутах:

from django.urls import path from . import views urlpatterns = [ path('post/<date:pub_date>/', views.post_by_date), path('post/<date:pub_date>/<slug:slug>/', views.post_detail), ]

В представлении мы получим объект типа date:

from django.http import HttpResponse def post_by_date(request, pub_date): return HttpResponse(f"Posts published on: {pub_date}")

Результат выполнения кода при обращении по URL /post/2025-01-15/:

"Posts published on: 2025-01-15"

Пример . С сложным конвертером

Создадим конвертер для работы с диапазонами чисел вида "10-20":

from django.urls import register_converter, path from django.http import HttpResponse class RangeConverter: regex = r'[0-9]+-[0-9]+' def to_python(self, value): start, end = value.split('-') return range(int(start), int(end) + 1) def to_url(self, value): return f"{value.start}-{value.stop - 1}" register_converter(RangeConverter, 'range')

Теперь можем использовать конвертер в URL-адресах:

from django.urls import path from . import views urlpatterns = [ path('products/<range:price_range>/', views.products_by_price), ]

В представлении параметр будет передан как объект range:

from django.http import HttpResponse def products_by_price(request, price_range): return HttpResponse(f"Product prices from {price_range.start} to {price_range.stop - 1}")

Результат выполнения кода при обращении по URL /products/100-500/:

"Product prices from 100 to 500"

Пример . С импортом в urls.py

Обычно регистрацию конвертеров выполняют в файле urls.py проекта или приложения:

from django.urls import register_converter, path from django.contrib import admin from . import views class YearConverter: regex = r'[0-9]{4}' def to_python(self, value): return int(value) def to_url(self, value): return str(value) register_converter(YearConverter, 'year') urlpatterns = [ path('admin/', admin.site.urls), path('posts/<year:year>/', views.posts_by_year), ]

После регистрации конвертер становится доступным во всех URL-шаблонах приложения:

from django.http import HttpResponse def posts_by_year(request, year): return HttpResponse(f"Posts from {year}")

Результат выполнения кода при обращении по URL /posts/2025/:

"Posts from 2025"

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

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