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)