Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:request.GET和KeyError_Python_Django_Django Urls - Fatal编程技术网

Python Django:request.GET和KeyError

Python Django:request.GET和KeyError,python,django,django-urls,Python,Django,Django Urls,代码: 在PHP框架中,我通常必须检查参数是否存在,如果不存在,则将用户重定向到某个地方。但在Django中,未列出的参数会导致500个错误页面,这似乎是期望的行为。那么,让代码保持原样可以吗?还是有更好的实践?我是否应该始终使用像/myaction/paramvalue/这样的标准参数来传递,而不是/myaction?param_name=param_value(为ajax请求构建这样的URL有点困难)?是的,在这种情况下,您应该检查KeyError。或者你可以这样做: # it's an a

代码:


在PHP框架中,我通常必须检查参数是否存在,如果不存在,则将用户重定向到某个地方。但在Django中,未列出的参数会导致500个错误页面,这似乎是期望的行为。那么,让代码保持原样可以吗?还是有更好的实践?我是否应该始终使用像/myaction/paramvalue/这样的标准参数来传递,而不是/myaction?param_name=param_value(为ajax请求构建这样的URL有点困难)?

是的,在这种情况下,您应该检查
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?

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

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

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


如果param不存在,传递默认值怎么样

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

defaultvalue通常不可用。顺便说一句,请尝试。。。如果我有几个参数的话,Exception block似乎更好(1 Exception block而不是几个检查都没有)。是的,是的。您还可能会发现,您必须对参数进行更具体的检查,以确定正确的值范围、参数之间的兼容性等等。如果您有许多输入参数,并且它为您完成了大部分工作,那么使用起来就更容易了。您的答案可以节省我的时间。如果
?param=
设置为无值,您仍然会得到一个keyerror,这是我找到的唯一合适的答案。谢谢
my_param = request.GET.get('param')
if my_param is None:
    return HttpResponseBadRequest()
my_param = request.GET.get('param', 'defaultvalue')