【问题标题】:django url pattern to match uuiddjango url 模式以匹配 uuid
【发布时间】:2018-12-02 19:28:32
【问题描述】:

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

使用 eMarket.urls 中定义的 URLconf,Django 尝试了这些 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),
]

【问题讨论】:

  • 那些\b 元素在里面做什么?
  • 我不完全是我只是在这里复制它,因为一切都在使用 int id 但是当我更改为 uuid 时,它需要可以满足的 url 模式,所以我之前从未做过我为什么寻求帮助
  • 当用户点击查看时 url 应该是这样的:
  • 尝试在模式末尾添加一个斜杠:...)/?$。此外,字边界 (\b) 可以安全删除。

标签: python django django-urls


【解决方案1】:
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

【讨论】:

  • path(r'^view/(?P[0-9A-Fa-f]{8}(-[0-9A-Fa-f]{4}){3 }-[0-9A-Fa-f]{12})', viewProduct, name="view"),
  • 你能定义不工作吗?你得到什么错误?
  • 这个错误:使用 eMarket.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:
  • urlpatterns = [ url(r'^$', homePage), url(r'^about/', aboutPage), url(r'^contact/', contactPage), url(r' ^create_products/', addProducts), path(r'^view/(?P[0-9A-Fa-f]{8}(-[0-9A-Fa-f]{4}){3 }-[0-9A-Fa-f]{12})', viewProduct, name="view"), url(r'^search/', searchProduct, name="search"), #name="search" url(r'^login/', loginPage), url(r'^register/', signupPage), url('admin/', admin.site.urls), ]
  • 请。浏览 Django 文档并尝试通过排除所有其他可能性来进行调试。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    到目前为止,我只能想象这可能会导致 URL 解析器出现问题:您正在使用名为 slug 的组中的捕获组。这样 Django 将收到完整的匹配加上 2 组,这可能会避免正确的 URL 解析。您可以在regex101 上快速查看此信息

    在重复模式使用非捕获组 (?:) 时,它将仅返回命名的捕获组 - 再次在 regex101

    那么,你可以试试(?P&lt;slug&gt;[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}) - 因为除此之外,我认为你的 urlpattern 没有任何问题。

    【讨论】:

      猜你喜欢
      • 2012-06-18
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2021-08-24
      • 2013-12-10
      • 2016-02-28
      • 1970-01-01
      • 2020-12-21
      相关资源
      最近更新 更多