【问题标题】:Django - returns single value after for loop while print returns multiple valuesDjango - 在 for 循环后返回单个值,而 print 返回多个值
【发布时间】:2012-08-26 22:53:33
【问题描述】:

我正在尝试打开一个 xml 文件,操作并呈现响应或从 url 下载文件。我正在返回多个对象,当我在 for 循环之后说 print 时,在终端中,我看到每个请求的对象都来了,但是当我说返回时,只有单个对象同时到达请求的 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

【问题讨论】:

    标签: python django string return render-to-response


    【解决方案1】:

    一旦函数“返回”,它就会终止。因此,您的 for 循环只执行一次。您可能希望将“return”替换为“yield”,从而使您的函数成为生成器,在 for 循环的每次迭代中产生响应。

    【讨论】:

    • 当我添加“yield s”时,我得到“生成器”对象没有“get”属性。你知道吗?
    • 好吧,问题是您试图在 django 视图中执行此操作,而 django 期望视图不是生成器...对不起,但我的回答并没有完全回答您的问题...如果您希望每个新请求使用程序和类别中的下一行返回响应,您需要依靠一些 django 会话来保留请求之间的状态(例如您当前在每个文件中查看的当前行)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多