Django URL中$符号的正确用法咨询及路由匹配问题排查
Django URL中$符号的正确用法
问题出在哪
你犯了个常见小错误:用path()函数却写了正则风格的r'^$'。path()是Django 2.0之后推出的简易路径匹配工具,它不支持正则表达式里的^(匹配开头)和$(匹配结尾),而且默认就会做精确路径匹配。
两种正确的写法
1. 用path()(推荐,适合简单场景)
如果要匹配根路径(空路径),直接传空字符串就行,不需要加^$:
from django.urls import include, path from vote import views urlpatterns = [ path('', views.index, name='index') ]
path()会自动帮你实现精确匹配,效果等价于正则的^$。
2. 用re_path()(适合复杂正则需求)
如果你的URL规则需要用到正则表达式,就换成re_path()(或者旧版本里的url()),这时候^$就能正常发挥作用了:
from django.urls import include, re_path from vote import views urlpatterns = [ re_path(r'^$', views.index, name='index') ]
这里的^$明确表示匹配完全为空的路径,也就是网站根路径。
为啥之前会出现匹配异常?
当你用path(r'^$', ...)时,Django会把^和$当成普通的路径字符来处理,它会尝试去找路径里包含这两个符号的URL,自然匹配不到你想要的根路径,所以才会出现异常。
内容的提问来源于stack exchange,提问作者Cyber Link
相关产品推荐
相关产品推荐

