Django 在 url 中使用“/”抛出错误
Django throwing error with '/' in url
我的 Django 应用程序中有一个 urls.py,如下所示:
url(r'^myurl/(?P<pid>.*)/(?P<qid>.*)/(?P<trantype>.*)$', views.MyView.as_view(), name='myurl'),
这里 url 中的 trantype
参数有时可以从它获取的数据中得到 '/'。当这种情况发生时,django 会向我抛出参数数量超出的错误。我怎样才能使 trantype
参数也采用 '/'?
我认为这里的错误信息具有误导性。
而不是超过参数的数量,我希望它找不到足够的参数,因为你的 .* 是贪婪的,这意味着它们会尝试尽可能多地匹配,所以 pid 会匹配到最后一个出现的反斜杠.我不确定为什么这会起作用。
如果您的 qid 和 pid 参数不能包含斜杠,肯定会建议将它们对应的捕获组限制为 \w+
。
试试这个模式:
url(r'^myurl/(?P<pid>\w+)/(?P<qid>\w+)/(?P<trantype>.*)$', views.MyView.as_view(), name='myurl'),
如果 \w 不削减它,您也可以尝试使捕获组变得惰性:
url(r'^myurl/(?P<pid>.*?)/(?P<qid>.*?)/(?P<trantype>.*)$', views.MyView.as_view(), name='myurl'),
我也在我的端点中使用斜线(Base64 编码字符串),我没有遇到过问题。
我的 Django 应用程序中有一个 urls.py,如下所示:
url(r'^myurl/(?P<pid>.*)/(?P<qid>.*)/(?P<trantype>.*)$', views.MyView.as_view(), name='myurl'),
这里 url 中的 trantype
参数有时可以从它获取的数据中得到 '/'。当这种情况发生时,django 会向我抛出参数数量超出的错误。我怎样才能使 trantype
参数也采用 '/'?
我认为这里的错误信息具有误导性。
而不是超过参数的数量,我希望它找不到足够的参数,因为你的 .* 是贪婪的,这意味着它们会尝试尽可能多地匹配,所以 pid 会匹配到最后一个出现的反斜杠.我不确定为什么这会起作用。
如果您的 qid 和 pid 参数不能包含斜杠,肯定会建议将它们对应的捕获组限制为 \w+
。
试试这个模式:
url(r'^myurl/(?P<pid>\w+)/(?P<qid>\w+)/(?P<trantype>.*)$', views.MyView.as_view(), name='myurl'),
如果 \w 不削减它,您也可以尝试使捕获组变得惰性:
url(r'^myurl/(?P<pid>.*?)/(?P<qid>.*?)/(?P<trantype>.*)$', views.MyView.as_view(), name='myurl'),
我也在我的端点中使用斜线(Base64 编码字符串),我没有遇到过问题。