0
我试图从URL获得ID(在Django)收到:验证ID用正则表达式
url(r'^preset/(P<pk>\d+)$', views.route_preset_api.as_view()),
这只要输入是一个数字效果很好。但如果它不是数字,页面将返回500错误。
我怎样才能做一个特殊的情况下,将采取的所有非有效输入照顾和将给例如
pk=0
为输出?
我试图从URL获得ID(在Django)收到:验证ID用正则表达式
url(r'^preset/(P<pk>\d+)$', views.route_preset_api.as_view()),
这只要输入是一个数字效果很好。但如果它不是数字,页面将返回500错误。
我怎样才能做一个特殊的情况下,将采取的所有非有效输入照顾和将给例如
pk=0
为输出?
首先,您的模式缺少指定命名组所需的?
。它应该是:
r'^preset/(?P<pk>\d+)$'
将与组名pk
,即命名组匹配的子字符串相关联。如果没有?
,则正则表达式将与字符串preset/P<pk>
匹配,后跟1个或多个数字。
其次,如果存在任何非数字,那么正则表达式将不匹配,并且404 Not Found响应将被发送。可能500错误发生在你的代码中的其他地方 - 是否有一个不太特定的模式匹配?
要处理无效请求,您可以添加第二个路由到相同视图函数的模式,但为pk
参数添加默认参数。 URL模式是:
url(r'^preset/[^\d]*$', views.route_preset_api.as_view()),
和查看功能会是这个样子:
def route_preset_api(request, pk=0):
...
现在pk
将默认为0
每当一个请求时,它包含一个非数字字符。
不,一个非数字输入会给404错误,因为它不会匹配'\ d +'。 –