Миграция пути URL-адреса Django (1.11-> 3.1) предупреждение для символов маршрута

#django-urls #django-3

#django-urls #django-3

Вопрос:

Я получил это предупреждение в Django 3.1.5 при выполнении миграции с 1.11

 ?: (2_0.W001) Your URL pattern 'employee/attendanceactivity/attendance/(?P<attendance_id>d )/' [name='employee-attendanceactivity-detail'] has a route that contains '(?P<', begins with a '^', or ends with a '

вот инструкция из url.py

 path('employee/attendanceactivity/attendance/(?P<attendance_id>d )/', 
    views.employee_attendanceactivity_detail, name = 'employee-attendanceactivity-detail'), 
 

Как я должен исправить это предупреждение? Спасибо

Ответ №1:

Начиная с Django 2.0, re_path должен использоваться для сопоставления регулярных выражений в шаблонах URL.

Измените свой путь следующим образом:

 from django.urls import re_path

urlpatterns = [
    # ...
    re_path(r'^employee/attendanceactivity/attendance/(?P<attendance_id>d )/

см. Документацию диспетчера URL-адресов Django.


Комментарии:

1. у вас не было ^ ? например, этот re_path(r' ^.... в чем разница, если пропустить ^ ? @Awin

2. ^ означает начало строки и $ является концом строки. Без них он будет соответствовать re_path четным промежуточным строкам. Обновлен ответ, чтобы включить оба ^ и amp;

3. что, если у меня есть что-то подобное, мне также поставить $ в конце -> re_path(r'^order/list/view_order/(?P<order_id> d )', orderadmin_views.orderadmin_view_order, name='orderadmin_view_order'),

4. Да, добавление $ в конце приводит к более конкретному регулярному выражению. В вашем случае, без $, он также будет соответствовать order/list/view_order/123/some-string .

Ответ №2:

К сожалению, стек не позволяет мне комментировать, но ответ на ваш последующий вопрос заключается в том, что ^ в начале шаблона является привязкой регулярного выражения "начало строки". Хотя ваш путь, скорее всего, будет работать без него, обычно рекомендуется включать ^ в начале и $ в конце ваших re_paths .

. This was likely an oversight when migrating to django.urls.path().
вот инструкция из url.py


Как я должен исправить это предупреждение? Спасибо

Ответ №1:

Начиная с Django 2.0, re_path должен использоваться для сопоставления регулярных выражений в шаблонах URL.

Измените свой путь следующим образом:


см. Документацию диспетчера URL-адресов Django.

Комментарии:

1. у вас не было ^ ? например, этот re_path(r' ^.... в чем разница, если пропустить ^ ? @Awin

2. ^ означает начало строки и $ является концом строки. Без них он будет соответствовать re_path четным промежуточным строкам. Обновлен ответ, чтобы включить оба ^ и amp;

3. что, если у меня есть что-то подобное, мне также поставить $ в конце -> re_path(r'^order/list/view_order/(?P<order_id> d )', orderadmin_views.orderadmin_view_order, name='orderadmin_view_order'),

4. Да, добавление $ в конце приводит к более конкретному регулярному выражению. В вашем случае, без $, он также будет соответствовать order/list/view_order/123/some-string .

Ответ №2:

К сожалению, стек не позволяет мне комментировать, но ответ на ваш последующий вопрос заключается в том, что ^ в начале шаблона является привязкой регулярного выражения "начало строки". Хотя ваш путь, скорее всего, будет работать без него, обычно рекомендуется включать ^ в начале и $ в конце ваших re_paths .

, views.employee_attendanceactivity_detail, name = 'employee-attendanceactivity-detail'),
# ...
]

см. Документацию диспетчера URL-адресов Django.

Комментарии:

1. у вас не было ^ ? например, этот re_path(r’ ^…. в чем разница, если пропустить ^ ? @Awin

2. ^ означает начало строки и $ является концом строки. Без них он будет соответствовать re_path четным промежуточным строкам. Обновлен ответ, чтобы включить оба ^ и amp;

3. что, если у меня есть что-то подобное, мне также поставить $ в конце -> re_path(r’^order/list/view_order/(?P<order_id> d )’, orderadmin_views.orderadmin_view_order, name=’orderadmin_view_order’),

4. Да, добавление $ в конце приводит к более конкретному регулярному выражению. В вашем случае, без $, он также будет соответствовать order/list/view_order/123/some-string .

Ответ №2:

К сожалению, стек не позволяет мне комментировать, но ответ на ваш последующий вопрос заключается в том, что ^ в начале шаблона является привязкой регулярного выражения «начало строки». Хотя ваш путь, скорее всего, будет работать без него, обычно рекомендуется включать ^ в начале и $ в конце ваших re_paths .

. This was likely an oversight when migrating to django.urls.path().вот инструкция из url.py


Как я должен исправить это предупреждение? Спасибо

Ответ №1:

Начиная с Django 2.0, re_path должен использоваться для сопоставления регулярных выражений в шаблонах URL.

Измените свой путь следующим образом:


см. Документацию диспетчера URL-адресов Django.

Комментарии:

1. у вас не было ^ ? например, этот re_path(r’ ^…. в чем разница, если пропустить ^ ? @Awin

2. ^ означает начало строки и $ является концом строки. Без них он будет соответствовать re_path четным промежуточным строкам. Обновлен ответ, чтобы включить оба ^ и amp;

3. что, если у меня есть что-то подобное, мне также поставить $ в конце -> re_path(r’^order/list/view_order/(?P<order_id> d )’, orderadmin_views.orderadmin_view_order, name=’orderadmin_view_order’),

4. Да, добавление $ в конце приводит к более конкретному регулярному выражению. В вашем случае, без $, он также будет соответствовать order/list/view_order/123/some-string .

Ответ №2:

К сожалению, стек не позволяет мне комментировать, но ответ на ваш последующий вопрос заключается в том, что ^ в начале шаблона является привязкой регулярного выражения «начало строки». Хотя ваш путь, скорее всего, будет работать без него, обычно рекомендуется включать ^ в начале и $ в конце ваших re_paths .