在Django视图中嵌套“for”不起作用

时间:2015-02-07 22:00:33

标签: python json django for-loop nested

我想为 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)个条目。但我看到的是第二个循环只返回最后一个值!因此,如果“j”循环从0到24,它将只返回“23”而已。好像它只是一个“圈”。

视图中的嵌套循环是否有限制?如果有,我可以在哪里放置它们?我试图让models.py摆脱逻辑。

1 个答案:

答案 0 :(得分:0)

您的问题是您在data_json['datos_TEU'][i]['values']循环的每次迭代开始时将j重置为空列表,因此它只会有一个元素。将该行移动到嵌套循环之前。

请注意,您的代码可以用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)