Перевод регулярных выражений URL в path в django 2.1 - PullRequest
0 голосов
/ 06 ноября 2018
url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        views.activate, name='activate'),

Я делал урок, но в django 2.1 вы должны использовать путь, как я могу перевести на функцию пути совместимого с 2.1 django?

ли

path('activate/<str:uidb64>/<uuid:token>/', views.activate, name='activate')

сделать то же самое?

1 Ответ

0 голосов
/ 06 ноября 2018

Я делал урок, но в django 2.1 вы должны использовать путь, как мне перевести на функцию пути совместимого с 2.1 django?

Нет , в , вы можете использовать path [Django-doc] или re_path [Джанго-док] . Кроме того, на сегодняшний день url [Django-doc] все еще поддерживается, но, вероятно, исчезнет в будущем.

re_path фактически эквивалентен старому url, поэтому вы можете написать это как:

<b>re_path</b>(
    r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
    views.activate,
    name='activate'
),

Создать полностью эквивалентный URL нелегко, поскольку Django поддерживает только преобразование по пяти путям по умолчанию :

Конвертеры путей

Следующие преобразователи пути доступны по умолчанию:

  1. str - Соответствует любой непустой строке, кроме разделителя path, '/'. Это значение по умолчанию, если конвертер не включен в выражение.
  2. int - соответствует нулю или любому положительному целому числу. Возвращает int.
  3. slug - Соответствует любой строке slug, состоящей из букв или цифр ASCII, а также символов дефиса и подчеркивания. Например, Здание-ваш-первых-Джанго-сайт.
  4. uuid - соответствует форматированный UUID. Чтобы предотвратить сопоставление нескольких URL-адресов на одной странице, необходимо включить тире и буквы в нижнем регистре. Например, 075194d3-6885-417e-a8a8-6c931e272f00. Возвращает UUID экземпляр.
  5. path - Соответствует любой непустой строке, включая разделитель path, '/'. Это позволяет сопоставить полный URL path, а не просто сегмент URL path, как с str.

Мы можем использовать slug здесь, но это будет соответствовать больше , чем указанный URL:

<b>path</b>(
    r'^activate/(<<b>slug:</b>uidb64>/<<b>slug:</b>token>/$',
    views.activate,
    name='activate'
),

Шаблон slug принимает в качестве регулярного выражения :

class SlugConverter(StringConverter):
    regex = '[-a-zA-Z0-9_]+'
...