python – 为什么Django找不到这些网址,尽管正则表达式匹配?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么Django找不到这些网址,尽管正则表达式匹配?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1615字,纯文字阅读大概需要3分钟。
内容图文
![python – 为什么Django找不到这些网址,尽管正则表达式匹配?](/upload/InfoBanner/zyjiaocheng/748/37cc0c178b3145898fa4fa68549f8340.jpg)
在正则表达式的python文档中,有“.”的描述.作用:
(Dot.) In the default mode, this matches any character except a
newline. If the DOTALL flag has been specified, this matches any
character including a newline.
对于我在Django中进行的项目,我设置了这个正则表达式:
url(r'^accounts/confirm/(.+)$', confirm,name='confirmation_view')
据我所知,这应该匹配任何以’accounts / confirm /’开头的网址,然后是任意数量的任意字符.然后将这些任意字符作为参数传递给函数“confirm”.到现在为止还挺好.
所以这个正则表达式应该匹配
accounts/confirm/fb75c6529af9246e4e048d8a4298882909dc03ee0/
同样如此
accounts/confirm/fb75c6529af9246e4e-048d8a4298882909dc03ee0/
和
accounts/confirm/fb75c6529af9246e4e=048d8a4298882909dc03ee0/
和
accounts/confirm/fb75c6529af9246e4e%20048d8a4298882909dc03ee0/
至少,这是我认为它会做的.但它没有,它只匹配第一个. Django一直让我回到404.我不理解,因为表达式的(.)部分应该表示“匹配除换行符之外的任何字符的一个或多个”.
编辑:
正如评论和答案所证明的那样,我得到了正则表达式.所以现在这是一个问题:为什么Django没有返回正确的视图,而是404.在将它传递给该正则表达式之前它是否正在对URL进行一些操作?
解决方法:
快速测试证实这应该有效:
>>>import re
>>>test = ["accounts/confirm/fb75c6529af9246e4e048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e-048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e=048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e%20048d8a4298882909dc03ee0/"]
>>>all([re.match(r'^accounts/confirm/(.+)$', item) for item in test])
True
这将在任何非匹配上返回false:
>>>test.append("something else")
>>>all([re.match(r'^accounts/confirm/(.+)$', item) for item in test])
False
问题必须在其他地方.
内容总结
以上是互联网集市为您收集整理的python – 为什么Django找不到这些网址,尽管正则表达式匹配?全部内容,希望文章能够帮你解决python – 为什么Django找不到这些网址,尽管正则表达式匹配?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。