【问题标题】:Django MultiValueDictKeyError what is it when do they occur and how can it be avoided?Django MultiValueDictKeyError 它们何时发生以及如何避免?
【发布时间】:2015-08-05 01:52:17
【问题描述】:

我在我的 zoom 变量的 views.py 中收到 MultiValueDictKeyError。当我删除缩放变量时,错误落在它下面的变量上。所以我可以假设这将只适用于其余变量。什么是 MultiValueDictKeyError 以及如何防止它们?

views.py

def getMarkers(request):
    query = request.GET 
    zoom = query.__getitem__('zoom')
    fromlat = query.__getitem__('fromlat')
    tolat = query.__getitem__('tolat')
    fromlng = query.__getitem__('fromlng')
    tolng = query.__getitem__('tolng')
    querystring = coordinate.objects.filter(lat__gt=fromlat) .filter(lat__lt = tolat).filter(lon__gt = fromlng).filter(lon__lt = tolng).filer(zoom_gt=zoom)
    data = serializers.serialize("json", coordinate.objects.all())
    return HttpResponse(data)

models.py

class coordinate(models.Model):
    name = models.CharField(max_length=30)
    lat = models.DecimalField(max_digits=10, decimal_places=7)
    lon = models.DecimalField(max_digits=10, decimal_places=7)
    zoom = models.IntegerField(default=15)

【问题讨论】:

  • 无论如何,您几乎不应该直接访问双下划线方法。使用query['zoom']query.get('zoom')等。

标签: python json django serialization


【解决方案1】:
x.__getitem__(y) == x[y]

所以如果 y 不在 GET 响应中,python 会引发 KeyError

使用 get() 方法而不是直接访问,它返回 None (或您通过 default kwarg 设置的任何内容)而不是 KeyError

zoom = request.GET.get('zoom')

query = request.GET 
zoom = query.get('zoom')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2011-12-10
    • 2011-05-24
    相关资源
    最近更新 更多