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

4 ответов


а также цифры 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

который будет обрабатывать недопустимые UUID или UUID, которые не существуют в базе данных.


Так как Django 2.0 вам даже не нужно беспокоиться о regex для UUID и int С новой функцией Django:Преобразователи Путь.

сделать элегантный код:

from django.urls import path
...

urlpatterns = [
    ...
    path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]

чтобы завершить другие ответы, обратите внимание, что регулярное выражение должно быть a-f не a-z, так:

urlpatterns = [
    url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]

что-то вроде выше, может быть самый точный ответ.


ваши шаблоны url принимают только номера, попробуйте это:

url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)