Django正则URL配置报错:视图函数参数不匹配问题求助
Django URL正则匹配触发视图参数错误的解决办法
你的问题出在正则表达式的捕获分组上:r'^(readme|help)$'里的括号是捕获分组,Django会自动把分组匹配到的内容(比如访问/readme时的"readme",访问/help时的"help")作为第二个参数传递给视图函数,但你的readme视图只定义了request这一个参数,所以就抛出了"takes 1 positional argument but 2 were given"的错误。
给你三种解决办法:
方法1:改用非捕获分组(推荐正则场景)
把正则里的括号改成(?:...),这样分组只会用于匹配,不会捕获内容传递给视图:
urlpatterns = [ re_path(r'^(?:readme|help)$', readme), ]
方法2:修改视图接受额外参数
如果需要用到匹配到的内容,或者不想改正则,可以给视图添加额外参数(哪怕不用):
# 接受任意额外参数,通用性强 def readme(request, *args, **kwargs): return HttpResponse('My test', content_type='text/plain') # 或者明确指定参数名 def readme(request, page_name): # 可以在这里根据page_name做不同逻辑,比如返回不同内容 return HttpResponse('My test', content_type='text/plain')
方法3:用path代替正则(推荐简单场景)
如果只是两个固定URL映射到同一视图,直接用path写两条规则更直观,不用正则:
from django.urls import path urlpatterns = [ path('readme', readme), path('help', readme), ]
内容的提问来源于stack exchange,提问作者martiz
相关产品推荐
相关产品推荐

