2012-09-01 2 views
0

XML 파일을 열고 조작하고 URL에서 파일을 다운로드하거나 렌더링하려고합니다. 내가 여러 개의 객체를 반환 할 때 나는 for 루프 이후에 print를 말하고있다. 터미널에서는 요청 된 모든 객체가 나온다.하지만 반환 할 때 하나의 객체 만이 요청 된 url과 terminal에 온다. 내 코드이다.Django - print가 여러 값을 반환하는 동안 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 루프는 한 번만 실행됩니다. 'return'을 'yield'로 바꾸면 함수가 for 루프의 각 반복마다 응답을 생성하는 생성기가됩니다.

+0

"yield"를 추가 할 때 'generator'객체에 'get'속성이 없습니다. 어떤 생각이 있습니까? – tunaktunak

+0

글쎄, 문제는 당신이 장고보기에서 이것을하려고하는 것입니다, 장고 전망 생성기되지 않습니다 기대하고 ... 미안하지만, 내 대답은 완전히 귀하의 질문에 대답하지 않습니다 ... 만약 당신이 새로운 요청을 반환하려면 프로그램과 카테고리의 다음 줄을 사용하여 응답을 요청할 때 (현재 각 파일에서보고있는 현재 줄과 같은) 요청 사이에 상태를 유지하기 위해 장고 세션에 의존해야합니다. –