Одна функция выгрузки для 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

Вопрос:

Как я могу это улучшить?

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