Импорт текста из внешнего текстового файла в отчет журнала html / jinja - PullRequest
0 голосов
/ 22 мая 2019

Я хотел бы импортировать текст из внешнего текстового файла в мой отчет журнала 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 без их анализа

, но они выглядят ужаснои чрезвычайно громоздким для меня для такого маленького действия.

Как мне решить эту проблему хорошим, коротким и питонским способом?

1 Ответ

1 голос
/ 22 мая 2019
with open('file_path/filename_with_extension.txt', 'r') as f:
    requirements_txt = f.read() 

#for pass string var in your example
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 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...