Как отформатировать шаблон с помощью django?

У меня есть приложение django. И я пытаюсь отформатировать некоторые данные.

У меня есть такой метод:

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.verdi_fruit_name_regex(),
            self.verdi_total_fruit_cost_regex(),
        ]
        matches = [self.findallfruit(regex) for regex in regexes]
       
        return tabulate(
            zip_longest(*matches),  # type: ignore
            headers=[
                "aantal fruit",
                "naam fruit",
                "kosten fruit",
             
            ],
        )

что дает такой результат:

    6           W   a   t   e   r   m   e   l   o   e   n   e   n           4   6   ,   2   0                                                       7   5           W   a   t   e   r   m   e   l   o   e   n   e   n           5   7   7   ,   5   0                                                           9           W   a   t   e   r   m   e   l   o   e   n   e   n           6   9   ,   3   0                       

но, как вы видите, это один горизонтальный выход.

Но я хочу, чтобы все элементы находились друг под другом. чтобы это выглядело так:

6  Watermeloenen 577,50
75 Watermeloenen  69,30
9  watermeloenen  46,20

и шаблон:


    <body>
        <div class="container center">
            <span class="form-inline" role="form">
                <div class="inline-div">
                    <form class="form-inline" action="/controlepunt140" method="POST" enctype="multipart/form-data">

                        <div class="d-grid gap-3">
                            <div class="form-group">
                                {% csrf_token %}
                                {{ pdf_form.as_p }}


                            </div>
                            <div class="form-outline">
                                <div class="form-group">
                                    <div class="wishlist">

                                        <table>


                                            <tr>
                                                {% for cell in content %}
                                                <td>{{ cell }}</td>
                                                
                                                {% endfor %}
                                            </tr>

                                        </table>

                                    </div>
                                </div>
                            </div>
                        </div>
                </div>
            </span>         
    </body>

и мнения:

def post(self, *args, **kwargs):

        filter_text = FilterText()
        excel_read = ExtractingTextFromExcel()
        compare_data = CompareData()

        pdf_form = UploadFileForm(self.request.POST, self.request.FILES)
        excel_form = ExcelForm(self.request.POST, self.request.FILES)

        content_excel = ""
        content = ""

        if pdf_form.is_valid() or excel_form.is_valid():
            try:

                uploadfile = UploadFile(image=self.request.FILES["upload_pdf"])
                upload_excel = UploadExcel(image=self.request.FILES["upload_excel"])

                uploadfile.save()
                upload_excel.save()

                # Uploading pdf file
                content = filter_text.show_extracted_data_from_file(
                    uploadfile.image.path
                )  # type: ignore

                # Uploading excel file
                excel_file = self.request.FILES["upload_excel"]
                content_excel = excel_read.extract_data_excel_combined(excel_file)  # type: ignore

            except Exception:
                pass

            return render(
                self.request,
                "main/controle_punt140.html",
                {
                    "pdf_form": pdf_form,
                    "excel_form": excel_form,
                    "content": content,
                    "content_excel": content_excel,
                },
            )

Вопрос: как отформатировать шаблон?

если я сделаю это:

 print(tabulate(
            zip_longest(*matches),  # type: ignore
            headers=[
                "aantal fruit",
                "naam fruit",
                "kosten fruit",
            ],
        ))

выглядит правильно:

 aantal fruit  naam fruit     kosten fruit
--------------  -------------  --------------
            16  Watermeloenen  123,20
           360  Watermeloenen  2.772,00
             6  Watermeloenen  46,20
            75  Watermeloenen  577,50
             9  Watermeloenen  69,30
           688  Appels         3.488,16
            22  Sinaasappels   137,50
            80  Sinaasappels   500,00
           160  Sinaasappels   1.000,00
           320  Sinaasappels   2.000,00
           160  Sinaasappels   1.000,00
            61  Sinaasappels   381,25

Но не в шаблоне

Пакет tabulate требует третьего параметра tablefmt для вывода HTML, поэтому необходимо передать tablefmt="html" в функцию tabulate() после headers.

    return tabulate(
        zip_longest(*matches),  # type: ignore
        headers=[
            "aantal fruit",
            "naam fruit",
            "kosten fruit",
        ],
        tablefmt="html",
    )

Вам нужно будет обернуть этот вывод с помощью mark_safe() из django.utils.safestring.

Обратите внимание, что при этом создается вся HTML-таблица со всеми тегами, поэтому вместо того, чтобы перебирать строки таблицы, вы можете просто вывести content сам по себе:

<div class="wishlist">
    {{ content }}
</div>

На этом этапе стоит переименовать content во что-то более подходящее, например table.

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