2015-02-07 50 views
0

欲生成用於的HttpResponse並且爲了建立它i'm使用嵌套的「for」結構的JSON類型對象。我寫下了一些代碼,試着用我的python解釋器,但是當我在我的django視圖上使用它時,它拒絕正常工作。嵌套「爲」在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") 

實際上它有一個更深入的水平,但作爲第二鴕鳥政策工作,我didn't把它放在這裏。

有了這個嵌套結構,我期待一個JSON對象和(b-a)條目在第一個級別中有(d-c)個條目。但是我看到的是第二個循環只返回最後一個值!所以,如果「j」循環從0到24,它將只返回「23」,而不會更多。似乎它只是一個「圈」。

視圖中的嵌套循環是否有限制?如果有的話,我可以把它們放在哪裏?我試圖保持models.py免於邏輯。

+2

你都清楚地做錯了什麼。爲我們提供更多的代碼。 – ozgur 2015-02-07 22:06:00

+0

即使嵌套for循環在Python中沒問題,Django也不允許在視圖中使用過多的縮進級別......只是在開玩笑!請張貼更多的代碼,因爲這對於嵌套的for循環來說並不是一個問題。儘管如此,儘量保持邏輯不在你的模型中,這很好! – 2015-02-07 22:18:47

+0

我剛剛添加了一些代碼。我保持第三個循環,直到我知道什麼是錯的。 – XcodeX 2015-02-07 22:21:00

回答

0

您的問題是您在j循環的每次迭代開始時將data_json['datos_TEU'][i]['values']重置爲空列表,所以它只會有一個元素。將該行移至嵌套循環之前。

請注意,您的代碼可以寫更多Pythonically:

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) 
+0

你是對的!謝謝! 我不會像你那樣掌握python,所以我會研究你的帖子,以瞭解你做到了嘿嘿。 – XcodeX 2015-02-08 13:00:13