匹配另一个 url - 正则表达式 django urls

Posted

技术标签:

【中文标题】匹配另一个 url - 正则表达式 django urls【英文标题】:match an alternative url - regular expression django urls 【发布时间】:2010-12-03 03:51:42 【问题描述】:

我想要一个只有 2 个备选方案的 Django URL:/module/in//module/out/

我正在使用

url(r'^(?P<status>\w+[in|out])/$', 
'by_status', 
name='module_by-status'),

但它匹配其他模式,例如 /module/i//module/n//module/ou/

任何提示表示赞赏:)

【问题讨论】:

【参考方案1】:

试试r'^(?P&lt;status&gt;in|out)/$'

您需要删除匹配一个或多个字母数字字符或下划线的\w+。 bstpierre 的回答中建议的正则表达式'^(?P&lt;status&gt;\w+(in|out))/$' 将匹配helloingood_byeout 等等。

请注意,如果您在 url 模式中使用竖线(竖线)字符 |,则 Django cannot reverse the regular expression。如果您需要在模板中使用 url 标签,则需要编写两种 url 模式,一种用于in,一种用于out

【讨论】:

@bluefish 谢谢,我已经更新了提到限制的答案【参考方案2】:

你想要(in|out),你使用的[]表示一个包含字符'i','n','|','o','u','t'的字符类。

【讨论】:

你建议这样?:^(?P\w+(in|out))/$' 请求:/status/in/ django 说:当前的 URL,/status/in/,不匹配任何这些。 ^(?P\w+(in|out))/$' 好的,我想我需要更多的上下文。你有更高级别的 urls.py 吗?如果是这样,它是否将 /status/ 从前面剥离?如果没有,您可能想要 '^(?P\w+/(in|out))/$' 欣赏这个解释。我完全忘记了这种区别。

以上是关于匹配另一个 url - 正则表达式 django urls的主要内容,如果未能解决你的问题,请参考以下文章

django url 正则表达式匹配可选参数

django url 正则表达式不匹配

Django url正则表达式匹配但找不到页面错误

调整 Django URL 中的正则表达式以匹配文件路径

python django 配置文件和url参数配置

第61篇 Django 路由系统 正则表达式和二级路由 路由的命名和反向解析