我遇到了一个奇怪的问题,虽然我现在找到了一个解决方案,但我认为了解造成错误的原因会很有帮助。我在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'),
)
由于视图收到的用户名= username / changepassword而不是username = username
,我收到错误404页面未找到以这种方式解释网址的原因是什么?为什么它会在第一时间工作?
答案 0 :(得分:2)
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>