Django, как вернуть файл после отправки формы? - PullRequest
1 голос
/ 31 марта 2020

Я хочу позволить пользователю отправить форму с некоторыми критериями фильтра и ответить с помощью файла CSV. Это мой код:

шаблон:

<form action="{% url 'filter_tracks' %}" method="get" id="filter-form">
    <various filter params>
    ...
    <a class="md-btn"  href="javascript:void(0)" onclick="$('#filter-form').submit();" id="csv_btn">Export</a>
</form>

views.py

filename = "TRACKS_EXP{x}_{z}.csv".format(x=int(time.time()), z=lang)
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="{x}"'.format(x=filename)
response.write(u'\ufeff'.encode('utf8'))
writer = csv.writer(response, delimiter=',', dialect='excel', quotechar = "\"", lineterminator='\r\n',)
for track in track_list:
    writer.writerow([...])

return response

Хотя это работает,

Я получаю данные внутри моего HTML страницы, а не в загружаемом файле.

Что я делаю не так?

1 Ответ

1 голос
/ 31 марта 2020

Это то, что я делаю, чтобы отправить файл с django клиенту, это должно работать и в вашем случае

import os
from django.conf import settings
from django.http import HttpResponse

def download(request, path):
    file_path = os.path.join(settings.MEDIA_ROOT, path)
    if os.path.exists(file_path):
        with open(file_path, 'rb') as fh:
            response = HttpResponse(fh.read(), content_type="application/vnd.ms-excel")
            response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
            return response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...