Django urls uuid не работает
Далее, если url задан как, каков должен быть шаблон для uuid?
urls.py
url(r'^getbyempid/(?P<emp_id>[0-9]+)/(?P<factory_id>[0-9]+)$',views.empdetails)
Не работает,
http://10.0.3.79:8000/app1/getbyempid/1/b9caf199-26c2-4027-b39f-5d0693421506
но это работает
http://10.0.3.79:8000/app1/getbyempid/1/2
Ответы
Ответ 1
Также как цифры 0-9, uuid также может содержать цифры a-f и дефисы, поэтому вы можете изменить шаблон на
(?P<factory_id>[0-9a-f-]+)
У вас может быть более строгое регулярное выражение, но оно обычно не стоит. На ваш взгляд, вы можете сделать что-то вроде:
try:
factory = get_object_or_404(Factory, id=factory_id)
except ValueError:
raise Http404
который будет обрабатывать недопустимые uuids или uuids, которых нет в базе данных.
Ответ 2
Начиная с Django 2.0 вам даже не нужно беспокоиться о регулярных выражениях для UUID и int с новой функцией Django: Конвертеры пути.
Сделайте код снова элегантным:
from django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
Ответ 3
Чтобы выполнить другие ответы, обратите внимание, что Regex должен быть a-f
not a-z
, поэтому:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
что-то вроде выше может быть самым точным ответом.
Ответ 4
Ваши шаблоны url принимают только числа, попробуйте следующее:
url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)
Ответ 5
была такая же проблема,
исправил это следующим образом:
url(r'^offer_details/(?P<uuid>[0-9a-f\-]{32,})$', offer_details, name='offer_details')
'