Jinja2,一个强大的 Python 库!

文摘   2024-11-04 09:10   河南  

Jinja2 - 从零开始学模板引擎

说真的,第一次接触 Jinja2 的时候我也是一脸懵。不过用着用着就发现,这玩意儿简直就是写模板的神器啊!它不光能生成 HTML,还能用来生成各种文本文件,比如配置文件、邮件模板啥的。看完这篇,保证你也能上手这个强大的模板引擎。

基本语法长啥样

Jinja2 的语法其实挺好记的。模板里面用 {{ }} 来放变量,用 {% %} 来写控制语句。我写个最简单的例子:
    from jinja2 import Template
    
    template = Template('哈喽,{{ name }}!')
    result = template.render(name='小明')
    print(result)  # 输出:哈喽,小明!

🌟 温馨提示:变量名区分大小写,写错了就渲染不出来啦!

模板继承真好使

写网页的时候老发现有些部分是重复的,比如导航栏、页脚这些。用 Jinja2 的模板继承就能解决这个问题:
    {# base.html #}
    <!DOCTYPE html>
    <html>
    <head>
        {% block head %}
        <title>{% block title %}{% endblock %}</title>
        {% endblock %}
    </head>
    <body>
        {% block content %}{% endblock %}
    </body>
    </html>
    
    {# page.html #}
    {% extends “base.html” %}
    {% block title %}我的页面{% endblock %}
    {% block content %}
    <h1>这是内容</h1>
    {% endblock %}

刷新新标签页

分享

控制台

关闭控制台

过滤器玩出花

过滤器就像是个小魔法师,能把数据变来变去。用法可简单了,就是在变量后面加个竖线,然后接上过滤器名:
    {# 把字符串变大写 #}
    {{ name|upper }}
    
    {# 去掉两边空格 #}
    {{ text|trim }}
    
    {# 还能串着用 #}
    {{ name|lower|trim }}

我经常用的几个过滤器:

  • default :变量不存在时用默认值
  • length :算长度
  • first :取第一个元素
  • random :随机选一个

控制结构随心所欲

if 判断和 for 循环也都支持,写起来跟 Python 差不多:
    {% if user.is_logged_in %}
        <p>欢迎回来,{{ user.name }}!</p>
    {% else %}
        <p>请先登录</p>
    {% endif %}
    
    <ul>
    {% for item in items %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>

🌟 温馨提示:别忘了结束标签,不然会报错。我就经常忘记写 endif...

宏:代码复用小能手

宏就像是函数,可以重复使用一段模板代码:
    {% macro input(name, type='text') %}
        <input type=“{{ type }}” name=“{{ name }}” value=“”>
    {% endmacro %}
    
    {# 使用宏 #}
    {{ input('username') }}
    {{ input('password', type='password') }}

写个表单什么的特别方便,代码看着也整洁。

全局函数不可少

Jinja2 自带了一些好用的全局函数:
  • range :生成数字序列
  • dict :创建字典
  • lipsum :生成假文本(写demo的时候特别好用)
    {% for n in range(1, 4) %}
        <p>这是第{{ n }}段</p>
    {% endfor %}

最骚的是还能自己加全局函数。我就写过一个格式化日期的:

    def format_date(value):
        return value.strftime('%Y-%m-%d')
    
    env.globals['format_date'] = format_date

看完这些,Jinja2 基本就掌握得差不多了。写模板的时候记得多试试,有啥问题就查文档,慢慢就熟练了。代码写多了自然就有感觉,模板引擎真的能帮咱们省不少事。

翔宇风
精彩纷呈,引人入胜。
 最新文章