具有复杂路径的 Django urls 行为

Django urls behaviour with complex path

在我的 django 项目中,在 urls.py 文件中我有一个 link 像这样:

...
url(r'^poliamb/(?P<m_path>\w+)/$', pol_data),
...

好的,当我有一个 url 像:

时,所有的工作都完成了

http://127.0.0.1:8000/poliamb/test1

但是我遇到了错误,例如

http://127.0.0.1:8000/poliamb/test1-other

如果url路径中有-号 django get url not defined error

有人可以帮我管理 url 带 - 符号的吗?

非常感谢

您的 url 正则表达式中的问题是 \w+ 匹配任意数量的单词字符。单词字符有a-z、A-Z、0-9和下划线(_)

test1 通过了该测试,但 test1-other 没有。

将您的正则表达式更改为 r'^poliamb\/(?P<m_path>[\w\-]+)\/$' 也将匹配包含破折号 (-) 的 url。

如果您不想匹配连续的连字符,您可以选择重复包含连字符和 1 个以上单词字符的非捕获组 (?:-\w+)*

在模式的末尾有一个 /,它不在示例数据中。如果它是可选的,你可以在最后使用 /?$

^poliamb/(?P<m_path>\w+(?:-\w+)*)/?$

Regex demo

最好使用 path 而不是 urlurl 已弃用并替换为 re_path

str 将采用除斜杠 ("/") 字符以外的任何字符串。

path(route='poliamb/<str:m_path>/', view=pol_data, name='pol_data'),

您也可以使用 slug:

path(route='poliamb/<slug:m_path>/', view=pol_data, name='pol_data'),

文档: