Я хотел бы импортировать текст из внешнего текстового файла в мой отчет журнала html / jinja.
Для этого у меня есть структура каталогов
│ main.py
│ requirements.txt
│
├───Output
│ log_report.html
│
├───templates
│ template.html
, в которой я запускаю
from jinja2 import Template, DebugUndefined
from shutil import copyfile
import datetime
import getpass
import os
import socket
def log_start(file_name_template, file_name_log):
copyfile(file_name_template, file_name_log)
template = Template(open(file_name_log).read(), undefined=DebugUndefined)
template_rendered = template.render(date_and_time=datetime.datetime.now().strftime("%Y-%m-%d, %H:%M:%S"),
host_name=socket.gethostname(),
user_name=getpass.getuser(),
requirements="requirements.txt")
return template_rendered
def main(output_dir="Output/",
file_name_basis="log_report"):
file_name_log = output_dir + file_name_basis + ".html"
template_rendered = log_start("templates/template.html", file_name_log)
with open(file_name_log, "w") as file_handle: file_handle.write(template_rendered)
if __name__ == "__main__":
main()
, где templates/template.html
состоит из
<!DOCTYPE html>
<html lang="en">
<body>
<!-- Program execution information. -->
<b>Program execution information.</b><br/>
Date and time: {{date_and_time}}<br/>
Host name: {{host_name}}<br/>
User name: {{user_name}}<br/>
Modules and their versions:<br/>
{{requirements}}
</body>
</html>
Код работает так же, как этот.Но вместо того, чтобы обозначать requirements.txt
в окончательном отчете журнала log_report.html
, я хочу, чтобы содержимое файла requirements.txt
было включено в окончательный отчет журнала log_report.html
.
Я рассмотрел стратегии какпредлагается в
https://www.dotnetcurry.com/html5/1167/read-local-file-api-html5-javascript
и
Вставка статических файлов буквально в шаблоны Jinja без их анализа
, но они выглядят ужаснои чрезвычайно громоздким для меня для такого маленького действия.
Как мне решить эту проблему хорошим, коротким и питонским способом?