2012-09-01 47 views
0

我試圖打開一個xml文件,操縱並呈現響應或從url下載文件。我正在做返回多個對象,當我說for循環打印後,在終端我看到每個請求的對象來,但當我說只返回單個對象來請求的URL和終端。這裏是我的代碼;Django - for循環後返回單個值,而打印返回多個值

def xml(request): 
filename = "/usr/..../...." 
programs = x.objects.all() 
categories = y.objects.all() 

with open(filename,'r+') as f: 

    old = f.read() 
    for m,k in itertools.product(categories,programs): 
     if k.name_tr == m.name_tr: 
      s = old.replace ('titlesss',k.name_tr,1) 
      j= k.introduction_tr 
      decoded = BeautifulStoneSoup(j, convertEntities=BeautifulStoneSoup.HTML_ENTITIES) 
      x =str(decoded) 
      x = unicode(x,"utf-8") 
      s = s.replace ("infosss",x,1) 
      if m.id == 310: 
        s = s.replace('idsss',"231",1) 
      elif m.id == 308: 
        s = s.replace ('idsss',"230",1) 
      elif m.id == 159: 
        s = s.replace ('idsss',"203",1) 
      elif m.id == 163: 
        s = s.replace ('idsss',"204",1) 
      elif m.id == 280: 
        s = s.replace ('idsss',"212",1) 
      elif m.id == 157: 
        s = s.replace ('idsss',"202",1) 
      elif m.id == 282: 
        s = s.replace ('idsss',"211",1) 
      response = HttpResponse(s,mimetype ="application/force-download")              
      response['Content-Disposition'] = 'attachment; filename=output.xml' 
      return response 

回答

2

一旦函數「返回」它終止。因此,for循環只執行一次。你可能想用'yield'替換'return',這樣你的函數就變成了一個生成器,它在for循環的每次迭代時都會產生響應。

+0

當我添加「yield s」時,我得到'generator'對象沒有屬性'get'。你有什麼想法嗎? – tunaktunak

+0

嗯,問題是你正在試圖在Django視圖中做到這一點,而Django期望視圖不是生成器...對不起,但我的回答並沒有完全回答你的問題...如果你想每個新的請求返回使用程序和類別中的下一行的響應,您需要依靠某些django會話來保持請求之間的狀態(如當前在每個文件中查看的當前行)。 –