Как иметь несколько операторов возврата в python django?
В моем Views.py я пытаюсь сначала загрузить файл csv на стороне клиента, а затем только хочу перенаправить его на другую страницу.
Ниже приведен мой код
def main(request):
...
...
url = '//file1.km.in.com/sd/recipe/' +"/"+ model + "_" + code + ".csv"
filename=model + "_" + code + ".csv"
download_csv(url,filename)
data = {"TableForm": TableForm, "devicelist": devicelist_1}
time.sleep(10)
return redirect('/ProductList/BetaTest', data)
def download_csv(url,filename):
csv = process_file(url)
response = HttpResponse(csv, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename='+filename
return response
def process_file(file_handle):
df = pd.read_csv(file_handle, index_col=False)
return df.to_csv(index=False)
Однако функция загрузки не работает, а напрямую перенаправляет на страницу BetaTest.
Я попытался отредактировать приведенный ниже код, и теперь функция загрузки работает, но она не может перенаправить на другую страницу:
def main(request):
...
...
data = {"TableForm": TableForm, "devicelist": devicelist_1}
csv = process_file(url)
response = HttpResponse(csv, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename='+filename
return response
time.sleep(10)
return redirect('/ProductList/BetaTest', data)
Есть ли идеи, как решить эту проблему?
Вы можете вернуть несколько значений, просто возвращая их через запятую.
return example1, example2
Вместо использования return, следует использовать yield:
def stream_response(request):
def generator():
for x in range(1,11):
yield f"{x}\n"
time.sleep(1)
return StreamingHttpResponse(generator())
Попробуйте это: views.py
def main(request):
...
...
data = {"TableForm": TableForm, "devicelist": devicelist_1}
if request.method=='GET':
csv = process_file(url)
response = HttpResponse(csv, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename='+filename
return response
return redirect('/ProductList/BetaTest', data)
Оператор return используется для завершения выполнения вызова функции и "возвращает" результат (значение выражения, следующего за ключевым словом return) вызывающей стороне. Выражения после оператора return не выполняются. Если оператор return не содержит никакого выражения, то возвращается специальное значение None.
Поэтому нет возможности вызвать два оператора возврата в одном вызове.