0Pricing
HTML Academy · 课时

服务器端模板:Jinja2 与 Handlebars

使用模板引擎在服务器上动态渲染 HTML

服务器端模板:Jinja2 与 Handlebars 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。

为什么使用服务器端模板

服务器端模板会在将 HTML 发送到浏览器之前在服务器上生成 HTML。它们可以在首字节时就提供利于 SEO 的标记,无需 JavaScript 也能工作,并避免纯客户端渲染中“直到 JavaScript 加载完成前都显示空白页面”的问题。

Jinja2(Python)

Jinja2 是事实上的 Python 模板库——Flask、Django(通过内置后端或 jinja2 后端)、Pelican 和 mkdocs 都在使用它。在 {% %} 标签中编写逻辑,在 {{ }} 中编写表达式:使用 <h1>{{ title }}</h1> 表示变量,使用 {% for item in items %} 表示循环。

<ul>
  {% for item in items %}
  <li>{{ item.name }} — ${{ item.price }}</li>
  {% endfor %}
</ul>

Handlebars(JavaScript)

Handlebars 是最常用的 Node.js 模板库,常用于事务性电子邮件(SendGrid、Mailgun)以及通过 Express 实现的 SSR。表达式写在 {{ }} 中,代码块使用 {{# }}:{{#each items}}<li>{{name}}</li>{{/each}}。

<ul>
  {{#each items}}
  <li>{{name}} — ${{price}}</li>
  {{/each}}
</ul>

自动转义

两个引擎默认都会自动转义变量输出——{{ user.name }} 当 name = "<script>" 时,输出 "&lt;script&gt;",从而使 XSS 失效。请始终依赖自动转义;只有对于受信任的 HTML,才使用显式的原始内容过滤器(Jinja:{{ x|safe }},Handlebars:{{{x}}})。

模板继承

Jinja:子模板中使用 {% extends "base.html" %},基础模板中使用 {% block content %}{% endblock %}。Handlebars:使用带有局部模板块的 {{#> layout }}{{/layout}}。这样,基础布局只需定义一次结构,页面再填充其中的可变区域。

包含与局部模板

Jinja:{% include "header.html" %}。Handlebars:{{> header}}。两者都会将另一个模板内联到当前模板中。局部模板是大型组件库的构建模块,可组合成页面和布局。

过滤器与辅助函数

Jinja 过滤器:{{ price|currency }}。Handlebars 辅助函数:{{currency price}}。两者都允许您对值调用格式化函数。您可以定义自己的辅助函数,用于项目特定的转换,例如日期格式化、复数形式处理和链接构建。

条件

Jinja:{% if user.is_logged_in %}Welcome{% else %}Sign in{% endif %}。Handlebars:{{#if user.isLoggedIn}}Welcome{{else}}Sign in{{/if}}。根据数据让模板进行分支,而不必依靠客户端 JS 来隐藏或显示内容。

性能

两个引擎都会先将模板预编译为函数,然后针对每个请求调用这些函数。编译只需进行一次,渲染速度很快。对于流量极高的网站,可以在边缘节点缓存已渲染的输出(Varnish、Cloudflare),而不是反复渲染完全相同的页面。

本地化

将模板与国际化库结合使用:Python 使用 Jinja2 + Babel,Node 使用 Handlebars + i18next。模板携带翻译键({{ t "welcome" }}),国际化层会将其解析为对应的语言。这样,一个模板就能以多种语言进行渲染。

框架模板

现代框架都有自己的模板格式:ERB(Rails)、Twig(Symfony)、Blade(Laravel)、Razor(.NET)、Slim/Haml(语法更加简洁)。这些模式相同,只是语法不同。请选择与您的后端语言和生态系统相匹配的引擎。

向组件迁移

对于传统的服务器渲染网站,模板非常实用。对于交互性更强的应用,Next.js(React)、Nuxt(Vue)和 SvelteKit 等框架模糊了界限——它们在服务器上渲染模板,但相同的组件会在客户端完成水合,从而实现交互功能。

知识检查

为什么 Jinja2 和 Handlebars 等模板引擎会默认启用自动转义?

总结

服务器端模板引擎(Python 使用 Jinja2,JS 使用 Handlebars,其他技术栈使用 ERB/Twig/Blade)会在服务器上利用变量、循环、条件、局部模板和继承生成 HTML。自动转义默认可以防御 XSS。结合国际化库即可构建多语言网站。模板是基础,现代框架则在其上增加水合功能。

常见问题解答

「服务器端模板:Jinja2 与 Handlebars」课时是免费的吗?

是的 — 「服务器端模板:Jinja2 与 Handlebars」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。

「服务器端模板:Jinja2 与 Handlebars」这节课中我会学到什么?

使用模板引擎在服务器上动态渲染 HTML 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 HTML Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「服务器端模板:Jinja2 与 Handlebars」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 HTML Academy 课中编写并运行代码吗?

能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 组件提取与局部模板
  2. 服务器端模板:Jinja2 与 Handlebars
  3. 设计系统中的 HTML
  4. 文档与样式指南集成
← 返回 HTML Academy