1 всегда не совпадает в регулярном выражении Django re_path
Я пытаюсь создать динамический путь, который принимает либо null, либо положительное целое число.
Например:
http://127.0.0.1:8000/my_url/23
в url.py:
from django.urls import path, re_path
urlpatterns = [
re_path(r'^my_url/(\s*|[0-9]{0,})$', views.my_function, name='my_function'),
]
в view.py:
def my_function(request, my_id):
if my_id == '':
#Do somthing
else:
#Do another somthing
Странная вещь:
в моем тесте были получены следующие результаты:
http://127.0.0.1:8000/my_url/2
http://127.0.0.1:8000/my_url/10
Единственное, что не удалось (то есть возврат 404, url не найден) это:
http://127.0.0.1:8000/my_url/1
Почему не совпадает только '1'? Является ли 1 специально обработанной в функции re_path?
В обновлении к вашему вопросу объясняется, что это, вероятно, какой-то механизм кэширования в браузере.
Однако я бы посоветовал разделить это на два paths: один с параметром <int:my_int>, а другой без такого параметра. Они оба могут вызывать одно и то же представление:
from django.urls import path
urlpatterns = [
path('my_url/', views.my_function, name='my_function'),
path('my_url/<int:my_id>/', views.my_function, name='my_function')
]
В представлении вы делаете my_id необязательным параметром, который разрешается в None в случае, если оно не вызывается с этим параметром:
def my_function(request, my_id=None):
if my_id is None:
# do something
else:
# do something else