我正在尝试打开一个xml文件,操作并呈现响应或从url下载文件。我正在做返回多个对象,当我说for循环后,在终端我看到每个请求的对象来了,但当我说返回时,只有单个对象来到请求的URL和终端。这是我的代码;
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
答案 0 :(得分:2)
一旦函数'返回',它就会终止。因此,for循环只执行一次。您可能希望将'return'替换为'yield',因此您的函数将成为一个生成器,在for循环的每次迭代中产生响应。