You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:59:09