Загрузка файла Excel в представлении Django
Я включил файл excel в каталог моего проекта. Я хочу создать представление Django, которое позволит пользователю скачать этот файл. Пожалуйста, как мне лучше всего это сделать?
import csv
from django.http import StreamingHttpResponse
# create an echo handler, returns what is put into for the writer
psuedo_buffer = Echo()
#Build csv writer ontop of echo filelike instance
writer = csv.writer(psuedo_buffer)
#Stream the response row by row using the psuedo_writer
response = StreamingHttpResponse((
writer.writerow(row) for row in query_data),
content_type="text/csv"
)
response['Content-Disposition'] = 'attachment; filename="Something.csv"'
return response
Это фрагмент кода, который я использую для возврата потокового HTTP-ответа с данными. Данные, которые будут в query_data, могут быть либо необработанными CSV данными из обработчика файла, который вы можете легко найти несколько способов открыть данные и бросить их в эту функцию, либо вы можете использовать массивы данных из наборов запросов для передачи. Просто отформатируйте ваши данные для query_set и верните этот обработчик Response в представлениях API или Template. Надеюсь, это поможет!
Данные должны быть отформатированы в массивы данных, которые вы можете использовать .dict для получения парсируемых данных из большинства моделей или просто парсинг csv в память с помощью библиотеки CSV выполнит то же самое.
Связан ли ваш файл с Моделью? Я предпочитаю создавать Модель для хранения общих ресурсов.
models.py
class Resources(models.Model):
description = models.CharField(max_length=200)
file = models.FileField(upload_to='uploads/resources/')
def __str__(self):
return self.description
views.py
...
some_file = Resources.objects.get(description='Your description')
...
return render(request, "template.html", {
"some_file": some_file,
}
template.html
...
<p>Download <a href="{{ some_file.file.url }}" target="_blank">file.</a></p>
...