Как объединить методы для вывода данных в textarea?

У меня есть приложение django. И у меня есть несколько методов, которые выводят данные в textarea через функцию upload

Так что я использую эту текстовую строку для вывода данных:

text="[' \n\na)\n\n \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. : 71201 Koopliedenweg 33\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 10-12-21\nAantal Omschrijving Prijs Bedrag\nOrder number : 77553 Loading date : 09-12-21 Incoterm: : FOT\nYour ref. : SCHOOLFRUIT Delivery date :\nWK50\nD.C. Schoolfruit\n16 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 123,20\n360 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 2.772,00\n6 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,/0 € 46,20\n75  Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 577,50\n9 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 69,30\n688 Appels Royal Gala 13kg 60/65 Generica PL I € 5,07 € 3.488,16\n22  Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 137,50\n80 Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 500,00\n160 Sinaasappels Valencias 15kg 105 FVC ZAI € 6,25 € 1.000,00\n320 Sinaasappels Valencias 15kg 105 Generica ZAI € 6,25 € 2.000,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 1.000,00\n61  Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 381,25\nTotaal Colli Totaal Netto Btw Btw Bedrag Totaal Bedrag\n€ 12.095,11 1.088,56\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\nVerDi Import BV ING Bank NV. Rotterdam IBAN number: NL17INGB0006959173 ~~\n\n \n\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 i\nTel, +31 (0}1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no. 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction.\n\nrut ard wegetables\n\x0c']"

и это список фруктов:

 self.list_fruit = ['Appels', 'Ananas', 'Peen Waspeen',
                           'Tomaten Cherry', 'Sinaasappels',
                           'Watermeloenen', 'Rettich', 'Peren', 'Peen',
                           'Mandarijnen', 'Meloenen', 'Grapefruit', 'Rettich']

и это один из методов:

   def fruit_list(self, format_=re.escape):
        return "|".join(format_(word) for word in self.extractingText.list_fruit)

    def verdi_total_number_fruit_regex(self):
        return rf"(\d*(?:\.\d+)*)\s*\W+(?:{self.fruit_list()})"

а это второй:

 def findallfruit(self, regex):
        return re.findall(regex, self.extractingText.text_factuur_verdi[0])

    def total_amount_fruit_regex(self):
        return rf"(\d*(?:\.\d+)*)\s*~?=?\s*({self.fruit_list()})"

    def total_fruit_per_sort(self):

        number_found = self.findallfruit(self.total_amount_fruit_regex())

        fruit_dict = {}
        for n, f in number_found:
            fruit_dict[f] = fruit_dict.get(f, 0) + int(n)
        result = '\n'.join(f'{key}: {val}' for key, val in fruit_dict.items())
        return result

    def show_extracted_data_from_file(self,  file_content):
        self.extractingText.extract_text_from_image(file_content)

А потом мне нравится комбинировать: "

".
 def show_extracted_data_from_file(self,  file_content):
        self.extractingText.extract_text_from_image(file_content)

        regexes = [
            self.verdi_total_number_fruit_regex(),           
            self.total_fruit_per_sort(),
        ]
        print(regexes)
        matches = [self.findallfruit(regex) for regex in regexes]
        return "\n".join(" \t ".join(items) for items in zip(*matches))

и поэтому шаблон:

  <div class="inline-div">
    
        <form
          action="/controlepunt140"
          method="POST"
          type="file"
          class="form-control form-control-lg"
          enctype="multipart/form-data"
        >
        
          {% csrf_token %} {{ form }}
          <input
            type="submit"
            type="file"
            value="Verstuur"
            accept="application/pdf"
          />
        </form>

        <textarea class="inline-txtarea" name="" id="" cols="70" rows="10">{{content}}</textarea>
      </div>

и функция загрузки:

class ReadingFile(View):
    def get(self, request):
        form = ProfileForm()
        return render(request, "main/controle_punt140.html", {
            "form": form
        })

    def post(self, request):
        extract_instance = ExtractingTextFromFile()
        filter_text = FilterText()

        extract_excel_instance = ExtractingTextFromExcel()
        types_of_encoding = ["utf8", "cp1252"]
        submitted_form = ProfileForm(request.POST, request.FILES)
        content = ''

        if submitted_form.is_valid():
            uploadfile = UploadFile(image=request.FILES["upload_file"])

            name_of_file = str(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)

                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,
        })

Но проблема в том. Что если я вставляю self.total_fruit_per_sort(), в регекс. В текстовой области нет вывода. Но без метода вывод в текстовой области есть.

В консоли я вижу вывод метода: self.total_fruit_per_sort(): Watermeloenen: 466\nAppels: 688\nSinaasappels: 803']

Так что я действительно застрял здесь.

Вопрос: Как получить вывод в textarea?

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