Для чего используется re_path в Django и чем он отличается от path

Ответ

re_path — это функция в Django для определения URL-маршрутов с использованием регулярных выражений (regex). Она находится в модуле django.urls и предоставляет максимальную гибкость в описании сложных URL-шаблонов, которые не могут быть описаны с помощью стандартных конвертеров path.

Пример:

from django.urls import re_path
from . import views

urlpatterns = [
    # Маршрут для архива статей по годам, например /articles/2023/
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
]

В этом примере регулярное выражение r'^articles/(?P<year>[0-9]{4})/$ соответствует URL-адресам вида /articles/2023/ и извлекает год в качестве именованного аргумента year, который передается в представление views.year_archive.

Ключевое отличие от path:

  • path использует простой синтаксис с конвертерами путей (например, <int:pk>), что делает его более читаемым и предпочтительным для стандартных случаев.
  • re_path использует всю мощь Python-модуля re, что необходимо для нестандартных или устаревших URL-схем, которые не покрываются конвертерами path.

Рекомендация:

Всегда используйте path, если это возможно. Прибегайте к re_path только тогда, когда гибкости path недостаточно для решения вашей задачи.

Ответ 18+ 🔞

Слушай, вот есть у нас в Django эта штука — re_path. Представь себе, что path — это такой аккуратный, культурный парень, который всё делает по правилам: «дай-ка мне число, я его как int передам». А re_path — это его старший братан, который пришёл из 90-х, в кожанке, и говорит: «Забудь про эти ваши конвертеры, я тут регуля́рками рулю, понимаешь?»

По сути, это та же функция для маршрутов, но она жрёт регулярные выражения. Полная мощь, полный беспредел. Лежит в django.urls.

Смотри, как это выглядит:

from django.urls import re_path
from . import views

urlpatterns = [
    # Ловим, блядь, статьи по годам. Например, /articles/2023/
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
]

Видишь эту дичь r'^articles/(?P<year>[0-9]{4})/$'? Это и есть регулярка. Она как стражник на въезде: «Хуй тебе, а не пройдёшь, если не четыре цифры подряд!» А если пройдёшь — выцепит эти цифры, назовёт их year и сунет прямо в твою вьюху views.year_archive. Красота, ёпта!

А в чём, собственно, разница с path?

  • path — это цивилизация. Пишешь <int:pk> и спишь спокойно. Читаемо, понятно, не надо ебать мозг.
  • re_path — это когда тебе нужно что-то настолько ебнутое, что стандартными конвертерами не описать. Типа, «ловим только номера, которые делятся на 7, но не заканчиваются на 13». Вот тут-то и включается старший братан с его регуля́рками.

Мой тебе совет, как старого, видавшего виды, пердуна:

Если можно сделать через path — делай через path. Не выёбывайся. re_path — это как аптечный спирт: мощно, но если не умеешь с ним обращаться, можно и глаза остаться. Используй его только тогда, когда path сдаётся и говорит: «Ну нахуй, сам разбирайся с этим пиздецом».