Одна функция выгрузки для pdf и вторая функция выгрузки для excel
У меня есть шаблон с двумя функционалами загрузки: один для pdf и один для excel.
У меня есть две текстовые области для отображения данных из загруженного файла: одна текстовая область для данных из pdf и одна текстовая область для данных из excel
Но теперь моя проблема в том, как объединить эти два компонента в файле views.py?
Вот как выглядит шаблон:
{% extends 'base.html' %} {% load static %} {% block content %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Create a Profile</title>
<link
rel="stylesheet"
type="text/css"
href="{% static 'main/css/custom-style.css' %}"
/>
<link
rel="stylesheet"
type="text/css"
href="{% static 'main/css/bootstrap.css' %}"
/>
</head>
<body>
<div class="container center">
<span class="form-inline" role="form">
<div class="inline-div">
<form
class="form-inline"
role="form"
action="/controlepunt140"
method="POST"
enctype="multipart/form-data"
>
<div class="form-group">
{% csrf_token %} {{ form }}
<button type="submit" class="btn btn-warning">Upload!</button>
</div>
</form>
<div class="form-outline">
<div class="form-group">
<textarea class="inline-txtarea form-control" cols="70" rows="25">
{{content}}</textarea
>
</div>
</div>
</div>
</form>
<span class="form-inline" role="form">
<div class="inline-div">
<form
class="form-inline"
role="form"
action="/controlepunt140"
method="POST"
enctype="multipart/form-data"
>
<div class="form-group">
{% csrf_token %} {{ form }}
<button type="submit" class="btn btn-warning">Upload!</button>
</div>
</form>
<div class="form-outline">
<div class="form-group">
<textarea class="inline-txtarea form-control" cols="65" rows="25">
{{content_excel}}</textarea
>
</div>
</div>
</div>
</form>
</div>
</body>
</html>
{% endblock content %}
а это views.py:
class ReadingFile(View):
def get(self, request):
form = ProfileForm()
return render(request, "main/controle_punt140.html", {
"form": form
})
def post(self, request):
filter_text = FilterText()
types_of_encoding = ["utf8", "cp1252"]
submitted_form = ProfileForm(request.POST, request.FILES)
content = ''
content_excel = ''
if submitted_form.is_valid():
uploadfile = UploadFile(image=request.FILES["upload_file"])
uploadfile.save()
for encoding_type in types_of_encoding:
with open(os.path.join(settings.MEDIA_ROOT,
f"{uploadfile.image}"), 'r', encoding=encoding_type) as f:
if uploadfile.image.path.endswith('.pdf'):
content = filter_text.show_extracted_data_from_file(
uploadfile.image.path)
if uploadfile.image.path.endswith('.excel'):
pass
else:
content = f.read()
return render(request, "main/controle_punt140.html", {
'form': ProfileForm(),
"content": content
})
return render(request, "main/controle_punt140.html", {
"form": submitted_form,
})
Но если я попытаюсь загрузить файл pdf, то получу эту ошибку:
UnicodeDecodeError at /controlepunt140
'utf-8' codec can't decode byte 0xed in position 10: invalid continuation byte
Итак, эта ошибка связана с этим фрагментом кода:
if uploadfile.image.path.endswith('.excel'):
pass
Вопрос:
Как я могу это улучшить?