Django的URL模式来匹配UUID

时间:2018-06-23 16:03:04

标签: python django django-urls

我正在使用Django 1.11。我试图获取url模式以匹配uuid,但是它不起作用。我已经尝试了3次以上,但是仍然出现错误:

  

Django使用eMarket.urls中定义的URLconf,尝试了这些URL   模式,按此顺序:
  http://127.0.0.1:8000/view/49c26740-2211-4cc9-971b-5ff62ddc2e0e/

urlpatterns = [
    url(r'^view/(?P<slug>\b[0-9A-Fa-f]{8}\b(-\b[0-9A-Fa-f]{4}\b){3}-\b[0-9A-Fa-f]{12}\b)$', viewProduct, name="view"),
    url('admin/', admin.site.urls),
]

3 个答案:

答案 0 :(得分:0)

import re

url = "http://127.0.0.1:8000/view/49c26740-2211-4cc9-971b-5ff62ddc2e0e/"

m = re.search("(?P<slug>[0-9A-Fa-f]{8}(-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12})", url)
print(m.group(0))

gives:
49c26740-2211-4cc9-971b-5ff62ddc2e0e

答案 1 :(得分:0)

您能使用django原生UUID path converter而不是尝试手动创建正则表达式吗?

答案 2 :(得分:0)

到目前为止,我只能想象这可能会导致URL解析器出现问题:您正在使用名为slug的组中的捕获组。这样,Django将收到完整匹配以及 2 组,这可能会避免适当的URL解析。您可以在regex101

上快速检查一下

enter image description here

虽然将非捕获组(?:)用于重复模式,但它将仅返回指定的捕获组-再次在regex101

enter image description here

因此,您可以尝试(?P<slug>[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12})-因为除此之外,我发现您的urlpattern确实没有问题。