0

xmlファイルを開き、応答を操作およびレンダリングするか、URLからファイルをダウンロードしようとしています。複数のオブジェクトを返すために行っています。forループの後にprintと言うと、ターミナルでは要求されたすべてのオブジェクトが返されますが、returnと言うと、要求されたURLとターミナルの両方に1つのオブジェクトだけが返されます。これが私のコードです。

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
4

1 に答える 1

2

関数が'戻る'と、それは終了します。したがって、forループは1回だけ実行されます。'return'を'yield'に置き換えると、関数がforループの各反復で応答を生成するジェネレーターになります。

于 2012-09-01T10:25:27.937 に答える