Функция загрузки файла не работает в Django views.py
[support.html]
<a href="/supporting/download/"><button type="button">Download File</button></a>
[supporting/urls.py]
from django.urls import path
from . import views
urlpatterns =[
path('supporting/download/',views.download),
...
]
[supporting/views.py]
def download(request):
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output)
worksheet = workbook.add_worksheet()
merge_format = workbook.add_format({'align': 'center', 'valign': 'vcenter'})
supportings = Supporting.objects.filter(is_deleted='0') \
.annotate(date_str=Cast(TruncDate('in_date'), CharField())) \
.values_list('date_str', 'date_str', 'study_name',
'register_number', 'person_name', 'person__no', 'date_str', 'kinds', 'teacher', 'comment', 'technician')
supportings = pd.DataFrame.from_records(supportings)
supportings = supportings.rename(columns={0: 'Days',
1: 'Date',
2: 'Study name',
3: 'Register Number',
4: 'Name',
5: 'No',
6: 'Time',
7: 'Kinds',
8: 'Teacher',
9: 'Comment',
10: 'Technician'})
for supporting in supportings['Days'].unique():
# find indices and add one to account for header
u = supportings.loc[supportings['Days'] == supporting].index.values + 1
if len(u) < 2:
pass # do not merge cells if there is only one supporting Days
else:
# merge cells using the first and last indices
worksheet.merge_range(u[0], 0, u[-1], 0, supportings.loc[u[0], 'Days'], merge_format)
workbook.close()
output.seek(0)
supportings.set_index(supportings.columns[:-1].tolist()).to_excel('success.xlsx')
Приведенный выше код нормально работает в Jupyter notebook, и файл загружается. Однако, когда я запускаю приведенный выше код в Django, нет возвращаемого значения, поэтому "Представление supporting.views.downloaddidn't return an HttpResponse object. Вместо этого оно вернуло None". Возникает ошибка
Итак, я удалил метод to_excel и добавил код, как показано ниже. Однако файл не может быть загружен. Событие не происходит
supportings.set_index(supportings.columns[:-1].tolist())
filename = 'Supporting_List.xlsx'
try:
filename.encode('ascii')
file_expr = 'filename="{}"'.format(filename)
except UnicodeEncodeError:
file_expr = "filename*=utf-8''{}".format(quote(filename))
response = HttpResponse(output, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; ' + file_expr
return response
Если кто-то знает решение, пожалуйста, помогите.