#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 .