我试图从网址(在django中)获取ID:
url(r'^preset/(P<pk>\d+)$', views.route_preset_api.as_view()),
只要输入是数字,这就可以正常工作。但如果不是数字,页面将返回500错误。
我该如何处理一个特殊情况,它将处理所有无效输入,并举例说明
pk=0
作为输出?
答案 0 :(得分: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
。