Django 视图中的嵌套 "for" 不起作用
Nested "for" in Django view won´t work
我想为 HttpResponse 生成一个 JSON 类型的对象,为了构建它,我正在使用嵌套的 "for" 结构。我写下了一些代码,用我的 python 解释器进行了尝试,但是当我在我的 Django 视图中使用它时,它无法正常工作。
我的结构是这样的:
tarifas = ['2.0A','2.0DHA','2.0DHSA']
terminos = ['Dia','Hora','GEN','NOC','VHC','COFGEN','COFNOC','COFVHC','PMHGEN','PMHNOC','PMHVHC','SAHGEN','SAHNOC','SAHVHC','FOMGEN','FOMNOC','FOMVHC','FOSGEN','FOSNOC','FOSVHC','INTGEN','INTNOC','INTVHC','PCAPGEN','PCAPNOC','PCAPVHC','TEUGEN','TEUNOC','TEUVHC']
data_json = {}
data_json['datos_TOT'] = []
data_json['datos_TEU'] = []
data_json['fecha'] = fecha
for i in range(3):
data_json['datos_TOT'].append({})
data_json['datos_TEU'].append({})
data_json['datos_TOT'][i]['tarifa'] = tarifas[i]
data_json['datos_TEU'][i]['tarifa'] = tarifas[i]
for j in range(0,24):
data_json['datos_TEU'][i]['values'] = []
data_json['datos_TEU'][i]['values'].append({})
data_json['datos_TEU'][i]['values'][j]['periodo'] = "{0}-{1}".format(j,j+1)
return HttpResponse(json.dumps(data_json), content_type="application/json")
事实上它还有一个深度级别,但由于第二个不起作用,我没有把它放在这里。
对于这个嵌套结构,我希望有一个 JSON 对象,第一层有 (b-a) 个条目,每个条目都有 (d-c) 个条目。但是我看到的是第二个循环只有 return 是最后一个值!因此,如果 "j" 循环从 0 到 24,它将只是 return“23”,仅此而已。好像只管用一个 "lap".
视图中的嵌套循环有限制吗?如果有,我应该把它们放在哪里?我试图让 models.py 摆脱逻辑。
你的问题是你在 j
循环的每次迭代开始时将 data_json['datos_TEU'][i]['values']
重置为一个空列表,因此它只会有一个元素。将该行移动到嵌套循环之前。
请注意,您的代码可以更加 Python 化地编写:
for tarifa in tarifas:
tot = {'tarifa': tarifa}
data_json['datos_TOT'].append(tot)
teu = {'tarifa': tarifa}
values = []
for j, termino in enumerate(terminos):
value = {'termino': termino, 'periodo': "{0}-{1}".format(j,j+1)}
values.append(value)
teu['values'] = values
data_json['datos_TEU'].append(teu)
我想为 HttpResponse 生成一个 JSON 类型的对象,为了构建它,我正在使用嵌套的 "for" 结构。我写下了一些代码,用我的 python 解释器进行了尝试,但是当我在我的 Django 视图中使用它时,它无法正常工作。
我的结构是这样的:
tarifas = ['2.0A','2.0DHA','2.0DHSA']
terminos = ['Dia','Hora','GEN','NOC','VHC','COFGEN','COFNOC','COFVHC','PMHGEN','PMHNOC','PMHVHC','SAHGEN','SAHNOC','SAHVHC','FOMGEN','FOMNOC','FOMVHC','FOSGEN','FOSNOC','FOSVHC','INTGEN','INTNOC','INTVHC','PCAPGEN','PCAPNOC','PCAPVHC','TEUGEN','TEUNOC','TEUVHC']
data_json = {}
data_json['datos_TOT'] = []
data_json['datos_TEU'] = []
data_json['fecha'] = fecha
for i in range(3):
data_json['datos_TOT'].append({})
data_json['datos_TEU'].append({})
data_json['datos_TOT'][i]['tarifa'] = tarifas[i]
data_json['datos_TEU'][i]['tarifa'] = tarifas[i]
for j in range(0,24):
data_json['datos_TEU'][i]['values'] = []
data_json['datos_TEU'][i]['values'].append({})
data_json['datos_TEU'][i]['values'][j]['periodo'] = "{0}-{1}".format(j,j+1)
return HttpResponse(json.dumps(data_json), content_type="application/json")
事实上它还有一个深度级别,但由于第二个不起作用,我没有把它放在这里。
对于这个嵌套结构,我希望有一个 JSON 对象,第一层有 (b-a) 个条目,每个条目都有 (d-c) 个条目。但是我看到的是第二个循环只有 return 是最后一个值!因此,如果 "j" 循环从 0 到 24,它将只是 return“23”,仅此而已。好像只管用一个 "lap".
视图中的嵌套循环有限制吗?如果有,我应该把它们放在哪里?我试图让 models.py 摆脱逻辑。
你的问题是你在 j
循环的每次迭代开始时将 data_json['datos_TEU'][i]['values']
重置为一个空列表,因此它只会有一个元素。将该行移动到嵌套循环之前。
请注意,您的代码可以更加 Python 化地编写:
for tarifa in tarifas:
tot = {'tarifa': tarifa}
data_json['datos_TOT'].append(tot)
teu = {'tarifa': tarifa}
values = []
for j, termino in enumerate(terminos):
value = {'termino': termino, 'periodo': "{0}-{1}".format(j,j+1)}
values.append(value)
teu['values'] = values
data_json['datos_TEU'].append(teu)