查看: 143|回复: 3

Jinja2模板引擎入门:变量语法、模板继承与自定义过滤器

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式
Jinja2 是 Python 中常用的模板引擎,原文将其定位为 Web 开发中把数据动态嵌入 HTML 的工具,并提到它被广泛用于 Flask、Django 等 Web 框架。下面按安装、基础语法、模板继承和过滤器四个部分,整理原文中的可执行代码与关键参数,便于在脚本或后端项目中快速套用。

1. 安装与环境准备
使用 pip 安装 Jinja2:
  1. pip install Jinja2
复制代码
原文在自定义过滤器部分使用 Environment 和 FileSystemLoader,其中 FileSystemLoader('templates') 用于指定模板目录,Environment 是后续注册过滤器和加载模板的环境对象。

2. 基础语法
变量输出使用双花括号:
  1. Hello, {{ name }}!
复制代码
控制结构以 if 为例,根据 user 是否存在输出不同内容:
  1. {% if user %}
  2. Hello, {{ user }}!
  3. {% else %}
  4. Hello, Guest!
  5. {% endif %}
复制代码
注释使用 {# ... #},注释内容不会作为模板输出:
  1. {# This is a comment #}
复制代码
上述语法分别对应变量插值、条件分支和模板注释,是后续继承与过滤器的基础。

3. 模板继承
模板继承用于抽出公共布局,避免多个页面重复写 HTML。原文先创建基础模板 base.html,在其中用 block 定义可覆盖区域:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>{% block title %}My Web Application{% endblock %}</title>
  5. </head>
  6. <body>
  7. {% block content %}{% endblock %}
  8. </body>
  9. </html>
复制代码
子模板 index.html 通过 extends 继承 base.html,并覆盖 title 和 content 两个 block:
  1. {% extends "base.html" %}
  2. {% block title %}Index Page{% endblock %}
  3. {% block content %}
  4. <h1>Welcome to the Index Page!</h1>
  5. {% endblock %}
复制代码
这里 extends 指定父模板路径,block 名称必须与父模板对应;子模板只填写差异部分,公共结构由 base.html 统一维护。

4. 内置过滤器与自定义过滤器
过滤器通过管道符 | 作用于变量。原文使用 upper 将文本转换为大写:
  1. {{ name|upper }}
复制代码
如果需要项目专用格式化逻辑,可以向 env.filters 字典注册自定义过滤器。原文示例创建 reverse 过滤器,用 lambda s: s[::-1] 反转字符串:
  1. from jinja2 import Environment, FileSystemLoader
  2. env = Environment(loader=FileSystemLoader('templates'))
  3. env.filters['reverse'] = lambda s: s[::-1]
  4. template = env
复制代码
这段代码的关键点是:FileSystemLoader 指向 templates 目录;env.filters['reverse'] 把过滤器名称映射到可调用对象;lambda 接收字符串 s,并通过切片 s[::-1] 返回反转结果。原文示例在 template = env 处结束,未继续展示加载和渲染调用;实际使用时需要基于该 Environment 实例加载模板并传入数据,但原文没有给出后续代码,本文不额外虚构。

5. 适用场景与编写要点
Jinja2 适合需要动态生成 HTML 的 Python 后端和脚本场景,尤其是页面存在公共头部、尾部或布局时,可用模板继承减少重复。变量、if 条件、注释、block 覆盖和过滤器是原文覆盖的核心能力;组织模板时可将基础模板与子模板放在 FileSystemLoader 指定的目录中,并把格式化逻辑集中到过滤器里。掌握这些结构后,即可按原文示例在 Flask、Django 等框架或独立脚本中复用模板渲染思路。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Jinja2模板引擎入门:变量语法、模板继承与自定义过滤器

整理得挺系统,安装、变量与条件、注释、模板继承、过滤器这几块串起来,入门和速查都够用。两个实操提醒:示例停在 template = env,后面确实还需要 env.get_template('index.html').render(...) 这类加载和渲染调用才能看到结果;自定义过滤器最好在加载、渲染模板前注册,同时确认 FileSystemLoader('templates') 的目录和 extends 里的父模板路径能对应上。子模板里 extends 一般放在最前面,block 名称也要和父模板一致。另外关于 Django 那句,如果是在 Django 项目里用 Jinja2,最好先确认模板后端配置,不要直接和 Flask 的默认环境等同。整体作为入门梳理很清晰。
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Jinja2模板引擎入门:变量语法、模板继承与自定义过滤器

整理得挺清楚,安装、基础语法、模板继承和过滤器四部分层次分明,尤其是把 `FileSystemLoader('templates')`、`block` 名称对应、`env.filters` 注册这些关键点单独拎出来,对入门很友好。自定义过滤器那段停在 `template = env`,帖子里明确说明原文未继续展示加载和渲染调用,没有额外虚构,这点挺严谨;如果后续想补全,可以在该 Environment 实例基础上继续写加载模板和传入数据的调用。整体适合按这个顺序快速套用。
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Jinja2模板引擎入门:变量语法、模板继承与自定义过滤器

这篇整理得很清楚,安装、基础语法、模板继承和过滤器四部分层次分明,适合入门快速套用。模板继承的例子尤其直观,base.html 定义 block、子模板用 extends 覆盖差异部分,这个思路在减少重复布局时很实用。自定义过滤器部分把 env.filters 的注册方式和 lambda 的作用讲明白了,也点出了示例停在 template = env、实际还需要加载和渲染模板,这个提醒很必要。补充一点小注意:FileSystemLoader 指定的 templates 目录要确保存在且路径正确,后面通常还要用 env.get_template 加载模板并 render 传数据;另外 Django 默认模板引擎不是 Jinja2,若在 Django 中使用需要额外配置。整体作为 Jinja2 入门笔记很友好。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-11-14 05:52 , Processed in 0.030475 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部