Django URL匹配问题:无法匹配含连字符的文章标题URL
解决Django URL匹配失败的问题
嘿,我一眼就看到问题所在啦——你混淆了Django里path()和re_path()的用法,还有视图函数的小语法错误,咱们一步步来修正:
问题根源
path()是Django 2.0+引入的简化路径匹配工具,它不支持正则表达式,只能用Django自带的路径转换器(比如str、slug、int这些)。你在path()里写了正则表达式语法,这肯定匹配不到目标URL的。另外,你的视图函数定义里多了一个右括号,这也会导致语法错误。
解决方案一:用re_path()(推荐正则场景)
如果你想保留正则表达式的写法,把path()换成re_path()(它是url()的别名,专门用来处理正则匹配),同时修正视图函数的语法:
# urls.py from django.urls import re_path # 注意导入re_path from . import views re_path(r'article/(?P<article_title>[\w\d.\'%@+-]+)/?$', views.article) # 可选加/?$匹配末尾的斜杠
# views.py def article(request, article_title): # 去掉多余的右括号 # 你的逻辑代码 pass
说明:正则里的/?$是可选的,用来兼容带斜杠和不带斜杠的URL(比如article/xxx和article/xxx/都能匹配)。
解决方案二:用path()的路径转换器(更简洁)
你的目标URL标题是类似Google-Home-Sales-Outpace-Amazons-Alexa-For-The-First-Time-13545的格式,正好符合slug转换器的匹配规则(ASCII字母、数字、连字符和下划线),用path()会更简洁,不需要写正则:
# urls.py from django.urls import path from . import views path('article/<slug:article_title>/', views.article)
视图函数同样修正为:
def article(request, article_title): pass
这样写不仅代码更干净,还符合Django的最佳实践哦~
内容的提问来源于stack exchange,提问作者Apetrei Alin
相关产品推荐
相关产品推荐

