gpt4 book ai didi

python - django 中 url 的排序

转载 作者:行者123 更新时间:2023-12-01 05:40:18 26 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,虽然我现在已经找到了解决方案,但我认为了解导致错误的原因会很有帮助。我在 Django 项目中有一个应用程序,网址如下:

  urlpatterns = patterns('',
url(r'^$', UserProfileListView.as_view(),
name='userprofile_list'),
url(r'^(?P<username>[\w.@+-_]+)/changepassword/$',
password_change, name='change_password'),
url(r'^(?P<username>[\w.@+-_]+)/$',
profile_detail,
name='userprofile_detail'),
)

当我将浏览器指向“change_password”时,一切正常。但是,我的网址排序如下:

    urlpatterns = patterns('',
url(r'^$', UserProfileListView.as_view(),
name='userprofile_list'),
url(r'^(?P<username>[\w.@+-_]+)/$',
profile_detail,
name='userprofile_detail'),
url(r'^(?P<username>[\w.@+-_]+)/changepassword/$',
password_change, name='change_password'),

)

由于 View 收到 username=username/changepassword 而不是 username=username,因此出现错误 404 页面未找到

以这种方式解释 url 的原因是什么?为什么它在第一个实例中起作用?

最佳答案

Dan Klasson 的评论就是答案。只是为了详细说明一下,您可以通过测试正则表达式轻松找到答案:

>>> import re
>>> re.match(r"^(?P<username>[\w.@+-_]+)/$", "foobar/changepassword/")
<_sre.SRE_Match object at 0x7f949c54be40>

FWIW 问题在于 \w 说明符,它可能不完全符合您的预期:

>>> re.match(r"\w", "foobar/changepassword/")
<_sre.SRE_Match object at 0x7f949c5a1d30>

关于python - django 中 url 的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com