停止基于 / 为 Django 中的 url 捕获任何字符串(正则表达式)

Posted

技术标签:

【中文标题】停止基于 / 为 Django 中的 url 捕获任何字符串(正则表达式)【英文标题】:Stop capturing any string based on / for urls in Django (regex) 【发布时间】:2012-04-04 03:01:33 【问题描述】:

所以我正在使用 Django 构建一个 web 服务,但是我在 Urls 中遇到了正则表达式的问题。

我想转到 localhost/user/USERNAME/products/,其中用户名可以是任何字符,而不仅仅是 \w。我试着用这个来捕捉它:

('^user/(?P<username>.+)/$', 'user'),
('^user/(?P<username>.+)/products/$', 'get_products'),

但 ofc 它会捕获用户名“USERNAME/products”并将其发送给用户。除了零以外的任何长度的任何长度的正斜杠除外,我应该怎么说每个可能的字符?

【问题讨论】:

【参考方案1】:

使用[^/]+ 代替.+

正如 Chris Pratt 在下面指出的,.+? 也可以工作,因为它是一个“非捕获”正则表达式,它将匹配任何字符,直到匹配以下子表达式。在可能的情况下,我通常更喜欢普通的急切解决方案而不是非捕获解决方案,因为它们不会引入多个评估规则。

【讨论】:

谢谢,只针对第一个,指向“用户”还是两个? .+? 也可以。它将捕获到下一次出现的/ @ChrisPratt 是的,虽然我认为这更简单。

以上是关于停止基于 / 为 Django 中的 url 捕获任何字符串(正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章

Django urls.py 在 WampServer 上捕获所有现有 HTML 项目的 url

如何捕获 URL 参数并基于 url 参数重定向到 angular4 中的其他组件

如何从 Django 中的表单中捕获错误?

django在url中捕获参数

捕获 yyyy-mm-dd 日期的 Django url

如何在我的 Django urls.py 中使用单个正则表达式捕获多个参数?