Как решить ошибку локальной переменной с помощью forloop в django?
Info: Я хочу получить данные из контекста. Данные из контекста поступают из функции цикла for.
Проблема: Я получаю это UnboundLocalError local variable 'context' referenced before assignment
def CurrentMatch(request, match_id):
match = Match.objects.get(id=match_id)
match_additional = MatchAdditional.objects.get(match=match)
innings = match_additional.current_innings
recent = Score.objects.filter(match=match).filter(innings=innings).order_by('over_number')[::-1][:1]
for score in recent:
context = {
"ball_number": score.ball_number,
"over_number": score.over_number,
}
return HttpResponse(json.dumps(context))
это произошло потому, что недавний набор queryset является emtpy. используйте этот сниппет:
def CurrentMatch(request, match_id):
match = Match.objects.get(id=match_id)
match_additional = MatchAdditional.objects.get(match=match)
innings = match_additional.current_innings
recent = Score.objects.filter(match=match).filter(innings=innings).order_by('over_number')[::-1][:1]
if len(recent) > 0:
for score in recent:
context = {
"ball_number": score.ball_number,
"over_number": score.over_number,
}
return HttpResponse(json.dumps(context))
else:
return HttpResponse(json.dumps({}))
С помощью этой части кода len(recent) вы можете проверить, есть ли в кверисете объекты или нет.
Вы должны сделать что-то вроде этого :
def CurrentMatch(request, match_id):
match = Match.objects.get(id=match_id)
match_additional = MatchAdditional.objects.get(match=match)
innings = match_additional.current_innings
recent = Score.objects.filter(match=match).filter(innings=innings).order_by('over_number')[::-1][:1]
if recent:
for score in recent:
context = {
"ball_number": score.ball_number,
"over_number": score.over_number,
}
return HttpResponse(json.dumps(context))
else:
return HttpResponse(json.dumps({}))