Django - возвращает одно значение после цикла for, а print возвращает несколько значений
Я пытаюсь открыть файл XML, манипулировать и отображать в ответ или загрузить файл с URL. Я делаю для возврата нескольких объектов, когда я говорю print for for loop, в терминале я вижу, что каждый запрошенный объект приходит, но когда я говорю, что return только один объект приходит и к запрошенному 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
1 ответ
Решение
Как только функция "возвращает", она завершается. Поэтому ваш цикл for выполняется только один раз. Возможно, вы захотите заменить "return" на "yield", таким образом, ваша функция станет генератором, который выдает ответ на каждой итерации цикла for.