模版

python 有木有 java 的 freemarker 那么好用的模版捏?虽然不太确定,但是 jinja2 在某种程度上和 freemarker 一样令人满意

500px 爬虫 这个项目里,我用 jinja2 生成了一个 html 文件,一起来看下

from jinja2 import Environment, PackageLoader

def generate_html_by_jinja2(user, galleries):
    env = Environment(loader=PackageLoader('px500', 'templates'))
    template = env.get_template('500px.html')
    html = template.render(username=user.name, galleries=galleries)
    with open(user.name + '.html', 'w', encoding='utf-8') as file:
        file.write(html)

模版文件

<!DOCTYPE html>
<html>
<head>
    <style>
        .gallery {float: left}
        .gallery_name {padding: 0px 0px 0px 10px; font-size: 160%}
        .photo {border: solid 1px silver; margin: 10px 5px 10px 10px; padding: 10px; float: left }
        img {height: 300px }
        a {text-decoration: none; color: blue }
        a:hover {text-decoration: underline; color: red }
    </style>
    <base target="_blank"/>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>{{ username }}@500px</title>
</head>
<body>
{% for gallery in galleries %}
<div class="gallery"><div class="gallery_name">{{ gallery.name }}</div>
    {% for image in gallery.images %}
    <div class="photo">
        <a href="{{ image.url }}">
            <img src="{{ image.thumb_url }}">
        </a><br>{{ image.name }}
    </div>
    {% endfor %}
</div>
{% endfor %}
</body>
</html>

说明

  1. Environment 表示环境,通过传入一个 Loader 可以加载到模版文件
    • 这个 Loader 有点问题,比如 PackageLoader 参数名是 package_name,但实际上你要传入的是 module_name
    • 又比如 FileSystemLoader,默认是从当前目录查找模版目录,但是同样的代码有时可以找到模版目录有时就不行
  2. get_template() 方法可以获取到模版实例
  3. template.render() 以字符串形式返回渲染后的模版内容,该方法接受关键字参数或 dict

模版语言

<!-- 输出变量的值 -->
{{ variable }}

<!-- 执行语句 -->
{% for v in list %}
{% endfor %}

results matching ""

    No results matching ""