在 Django 中使用 URL 作为 URL 参数

Using a URL as a URL parameter in Django

在我的 模型 中,我有以下内容:

class Content(models.Model):
    address = models.URLField(unique=True)

在我的 urls 中,我有这个模式:

url(r'^content_detail/(?P<address>[a-zA-Z-_./:0-9-_+=?;~@#%^&*(){}|`<>]+)/$', views.content_detail),

是的,说真的,这就是我使用的模式。基本上,我看了一下URL中可以使用的所有字符,并制作了图案。现在,我的问题是,它会起作用吗?它在我的测试中运行良好,但我不是正则表达式专家。有什么办法可以改善这个?如果可能的话,任何人都可以给我一个 URLs 的 django url 特定的正则表达式吗?非常感谢。

我认为您已经在 URL 中添加了所有可能的符号、字母和数字。

url(r'^content_detail/(?P<address>.*)/$', views.content_detail),

这允许您 URL 中的所有字符。

您的正则表达式将无法处理包含 Unicode 字符的 IDN(国际化域名)。我认为最简单的方法是在 .+ 上进行匹配,如 Aswin Kumar KP 在他的回答中所写,然后使用 Django 的 URLValidator 验证捕获的模式。您可以在该验证程序的源代码中找到 Django 的 URL 正则表达式:URLValidator