具有复杂路径的 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+)*)/?$
最好使用 path
而不是 url
。 url
已弃用并替换为 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'),
文档:
在我的 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+)*)/?$
最好使用 path
而不是 url
。 url
已弃用并替换为 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'),
文档: