Django:request.GET 和 KeyError

31 投票
3 回答
29157 浏览
提问于 2025-04-16 04:53

代码:

# it's an ajax request, so parameters are passed via GET method
def my_view(request):
    my_param = request.GET['param'] // should I check for KeyError exception?

在PHP框架中,我通常需要检查参数是否存在,如果不存在就把用户重定向到其他地方。但是在Django中,如果参数不存在,就会出现500错误页面,这似乎是预期的行为。那么这样写代码可以吗?还是说有更好的做法?我应该总是使用标准的参数传递方式,比如/myaction/paramvalue/,而不是/myaction?param_name=param_value(对于ajax请求来说,构建这样的URL有点困难)?

3 个回答

1

如果参数不存在的话,怎么传递默认值呢?

my_param = request.GET.get('param', 'defaultvalue')
12

是的,在这种情况下,你应该检查一下是否有KeyError错误。或者你也可以这样做:

if 'param' in request.GET:
    my_param = request.GET['param']
else:
    my_param = default_value
61

你的服务器不应该出现500错误页面。

你可以通过以下方式来避免这个错误:

my_param = request.GET.get('param', default_value)

或者:

my_param = request.GET.get('param')
if my_param is None:
    return HttpResponseBadRequest()

撰写回答