如何在没有 Flask 的情况下使用 jinja 渲染 HTML?

How to Use jinja to render HTML without flask?

我需要使用 jinja 渲染 HTML 页面,但没有 flask 我在这里阅读了一些其他问题,但是 none 有明确的答案,请告诉我如何实现相同的目标

File structre

1.py

HTML folder

1.html

templates
show persons.txt

这里我需要使用 1.py 渲染 1.html - 是否可以在离线模式下进行

当前1.py

  from jinja2 import Environment, FileSystemLoader

persons = [
    {'name': 'Andrej', 'age': 34},
    {'name': 'Mark', 'age': 17},
    {'name': 'Thomas', 'age': 44},
    {'name': 'Lucy', 'age': 14},
    {'name': 'Robert', 'age': 23},
    {'name': 'Dragomir', 'age': 54}
]

file_loader = FileSystemLoader('templates')
env = Environment(loader=file_loader)

template = env.get_template('show persons.txt')

 
template = env.get_template('1.html ') #  how can i do the same with html here
output = template.render(persons=persons)
print(output)

目前我可以打印输出,但如果我需要在 html 文件上获取相同的数据,可以在这里做什么?

另外,如果可能的话我们也可以在 运行

时打开 html 页面

Corralien 评论后的更新代码是一种直接在浏览器中打开它的方法

from jinja2 import Environment, FileSystemLoader

persons = [
    {'name': 'Andrej', 'age': 34},
    {'name': 'Mark', 'age': 17},
    {'name': 'Thomas', 'age': 44},
    {'name': 'Lucy', 'age': 14},
    {'name': 'Robert', 'age': 23},
    {'name': 'Dragomir', 'age': 54}
]

file_loader = FileSystemLoader('templates')
env = Environment(loader=file_loader)

template = env.get_template('1.html')

output = template.render(persons=persons)
print(output)

输出

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
Andrej -  34
Mark -  17
Thomas -  44
Lucy -  14
Robert -  23
Dragomir -  54

</body>
</html>

假设模板已经具有有效的html结构,听起来您只想编写一个文件

template = env.get_template('show persons.txt')
with open('HTML folder/1.html', 'w') as f:
    f.write(template.render(persons=persons))

要在浏览器中加载文件,您可以尝试使用os.startfile方法。否则,使用带有 subprocess 模块的特定浏览器可执行文件

要在浏览器中打开 html 文件,请使用 webbrowser 模块(标准库)

import webbrowser
import tempfile

# Your code here
...
output = template.render(persons=persons)

with open('output.html', 'w') as fp:
    fp.write(output)
webbrowser.open_new('output.html')  # or .open_new_tab('output.html')