Django:request.GET和KeyError

时间:2010-10-02 12:03:42

标签: python django django-urls

代码:

# 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 个答案:

答案 0 :(得分:38)

您的服务器不应该生成500错误页面。

您可以使用以下方法来避免错误:

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

或:

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

答案 1 :(得分:7)

是的,在这种情况下你应该检查KeyError。或者你可以这样做:

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

答案 2 :(得分:0)

如果param不存在,如何传递默认值?

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