web-dev-qa-db-ja.com

Django:request.GETとKeyError

コード:

# 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?param_name = param_valueの代わりに/ myaction/paramvalue /のような標準のパラメーターを常に使用する必要があります(このようなURLを作成するのはちょっと難しいです) ajaxリクエストの場合)?

23
glss

サーバーが500エラーページを生成することはありません。

次を使用してエラーを回避できます。

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

または:

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

はい、その場合はKeyErrorを確認する必要があります。または、これを行うことができます:

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

Paramが存在しない場合はデフォルト値を渡すのはどうですか?

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