Как иметь несколько операторов возврата в 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. Поэтому нет возможности вызвать два оператора возврата в одном вызове.

Вернуться на верх