Django url uuid不工作

时间:2015-10-05 13:57:20

标签: django django-urls

在下文中,如果将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

5 个答案:

答案 0 :(得分:32)

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

答案 1 :(得分:29)

自Django 2.0以来,您甚至不需要担心使用新的Django功能 UUID int 的正则表达式:Path Converters

让代码再次优雅

from django.urls import path
...

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

答案 2 :(得分:5)

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

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

上面的内容可能是最准确的答案。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

有同样的问题, 修复它:

url(r'^offer_details/(?P<uuid>[0-9a-f\-]{32,})$', offer_details, name='offer_details')
`