Як відобразити вивід jinja2 у файлі на Python замість браузера


86

У мене є шаблон jinja2 (файл .html), який я хочу відобразити (замінити маркери значеннями з мого файлу py). Замість того, щоб відправляти отриманий результат у браузер, я хочу записати його у новий файл .html. Я думаю, рішення також буде подібним для шаблону django.

Як я можу це зробити?

Відповіді:


129

Як щодо чогось такого?

from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('test.html')
output_from_parsed_template = template.render(foo='Hello World!')
print(output_from_parsed_template)

# to save the results
with open("my_new_file.html", "w") as fh:
    fh.write(output_from_parsed_template)

test.html

<h1>{{ foo }}</h1>

вихід

<h1>Hello World!</h1>

Якщо ви використовуєте фреймворк, такий як Flask, то ви можете зробити це внизу вашого перегляду, перш ніж повернутися.

output_from_parsed_template = render_template('test.html', foo="Hello World!")
with open("some_new_file.html", "wb") as f:
    f.write(output_from_parsed_template)
return output_from_parsed_template

Дякуємо за швидку відповідь. Якщо я правильно розумію, то до вашого першого snippit: from jinja2 import Environment, FileSystemLoader env = Environment (loader = FileSystemLoader ('templates')) template = env.get_template ('test.html') output_from_parsed_template = template.render (foo = 'Привіт, світ!') Print output_from_parsed_template Я міг замінити рядок друку якимось рядком запису файлу. Це правильно? Як може виглядати такий рядок для запису у файл? Re. Flask, це невелика частина великого додатка, тому я не знаю, чи зможу я використовувати фреймворк.
Білл Г.

Дякую за роз'яснення. Нарешті я мав можливість спробувати це. Спочатку я отримав повідомлення про помилку "Немає такого файлу або каталогу: 'my_new_file.html'". Очевидно, файл вже повинен існувати. Потім я скопіював файл шаблону та перейменував його на 'my_new_file.html'. Тепер я отримую повідомлення про помилку: IOError: Файл не відкритий для запису. Це може бути тому, що я розробляю в Google App Engine?
Білл Г.

@BillG. Ні, це була помилка з мого боку. Спробуйте змінити вище: змінено rbна wb.
sberry

Дякуємо за швидку відповідь. Я змінив rb на wb, і тепер я отримую таку помилку: IOError: неправильний режим: wb
Білл Г.

У )кінці першого рядка в нижньому розділі коду немає. Я намагався додати його, але SO вимагає, щоб редагування
складало


8

Отже, після того, як ви завантажили шаблон, ви викликаєте render, а потім записуєте вихідні дані у файл. Оператор 'with' - це менеджер контексту. Усередині відступу у вас є відкритий файл, такий як об'єкт, який називається 'f'.

template = jinja_environment.get_template('CommentCreate.html')     
output = template.render(template_values)) 

with open('my_new_html_file.html', 'w') as f:
    f.write(output)

Отже, чи буде це виглядати приблизно так: TEMPLATE_DIR = os.path.join (os.path.dirname ( файл ), 'templates') jinja_environment = \ jinja2.Environment (autoescape = False, loader = jinja2.FileSystemLoader (TEMPLATE_DIR)) шаблон = jinja_environment.get_template ('CommentCreate.html') self.response.out.write (template.render (template_values)) with open ('my_new_html_file.html', 'w') як f: f.write (response.content) де template_values, де вже заповнені. Будь ласка, виправте за потреби. Дякую.
Білл Г.

Дякую за роз'яснення. Нарешті я мав можливість спробувати це. Спочатку я отримав повідомлення про помилку "Немає такого файлу або каталогу: 'my_new_file.html'". Очевидно, файл вже повинен існувати. Потім я скопіював файл шаблону та перейменував його на 'my_new_file.html'. Тепер я отримую повідомлення про помилку: IOError: Файл не відкритий для запису. Це може бути тому, що я розробляю в Google App Engine?
Білл Г.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.