Как отформатировать шаблон с помощью 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
.