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')
'