Django: request.GET and KeyError

Question:

Code:

# 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?

In PHP Frameworks I typically have to check for parameter to exists and redirect user somewhere if it does not. But in Django unexisted parameter results in 500 error page and it seems desired behaviour. So is it ok to leave code as is or there is a better practic? Should I always use standard params passing like /myaction/paramvalue/ instead of /myaction?param_name=param_value (it’s kinda hard to build such URLs for ajax requests)?

Asked By: glss

||

Answers:

Yes, you should check for KeyError in that case. Or you could do this:

if 'param' in request.GET:
    my_param = request.GET['param']
else:
    my_param = default_value
Answered By: Mike DeSimone

Your server should never produce a 500 error page.

You can avoid the error by using:

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

or:

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

How about passing default value if param doesn’t exist ?

my_param = request.GET.get('param', 'defaultvalue')
Answered By: Srikanth Chundi
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.