Django url uuid不工作

问题描述 投票:9回答:4

在下面,如果url被设置为,那么uuid的模式应该是什么?

URLs.朋友

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
django django-urls
4个回答
33
投票

除了数字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。


31
投票

从Django 2.0开始,你甚至不需要担心UUID的正则表达式和新的Django功能:Path Converters

让代码再次优雅:

from django.urls import path
...

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

5
投票

只是为了完成其他答案,请注意正则表达式应该是a-f而不是a-z,所以:

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

像上面这样的东西可能是最准确的答案。


1
投票

您的网址模式仅采用数​​字,请尝试以下方法:

url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)
© www.soinside.com 2019 - 2024. All rights reserved.