Fork me on GitHub

模板引擎

模板引擎对模板文件进行处理,模板文件是处于你的 Python 代码和需要输出的格式化内容(如 HTML 和 PDF 等)之间的一种中间格式文件。

为什么说模板引擎很重要?

模板引擎允许开发人员创建 HTML 等所需的内容形式,同时,它还提供条件判断和 for 循环等编程构件来对输出进行处理。 模板文件由预定义的标记和待插入内容的模板标签段组成, 这些文件由开发人员创建,然后再由模板引擎处理。

例如,查看当前网页的 HTML 内容的前 10 行源代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="author" content="Matt Makai">
    <meta name="description" content="Template engines provide programmatic output of formatted content such as HTML, XML or PDF.">
    <link rel="shortcut icon" href="//static.fullstackpython.com/fsp-fav.png">

除了 <meta name="description"... 这行,它是为各个单独页面提供包含哪些内容的简短描述之外, 上面的各行 HTML 代码对于 Full Stack Python 网站的每个页面来说都是一样的。

base.html 是用于创建 Full Stack Python 的 Jinja 模板,它使得网站的每个页面都有一致的 HTML 内容结构,同时又能为每个页面动态生成那些在 静态网站生成器 执行时需要修改的内容。下面的代码来自 base.html 模板,可以看到 meta 描述是要求子模板来生成的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="author" content="Matt Makai">
    {% block meta_header %}{% endblock %}
    <link rel="shortcut icon" href="//static.fullstackpython.com/fsp-fav.png">

在一个典型的 WSGI 应用中,当某个特定 URL 的 HTTP 请求进来后,模板引擎将生成一个 HTML 文件的应答。

Python 模板引擎

Python 有几个比较流行的模板引擎。从允许执行任意代码,到只准许通过模板标签来执行有限的功能,每个模板引擎都有各自的实现方式。从下图可以看出 Python 的四个主要模板引擎的模板代码功能。

从不含任何逻辑代码到能执行任意代码。

Jinja

Jinja, 也叫做 "Jinja2", 这个广受欢迎的 Python 模板引擎是作为一个独立的开源项目开发的,而不像其它的一些模板引擎那样是某个较大的 Web 框架的一部分。

主要的 Python 开源应用如 配置管理 工具 Ansible 和 SaltStack,以及 静态网站生成器 Pelican 等都默认使用 Jinja 来创建输出文件 。

Jinja2 页还有很多很多关于 Jinja 的学习内容。

Django 模板

Django (如 Django 1.9) 除了支持 Jinja 等其它一些可替代的模板引擎外,它还有 自己的模板引擎

Mako

MakoPyramid Web 框架 的默认模板引擎,并且因作为许多 其它 Web 框架的替代模板引擎而广受支持。

模板引擎资源

接下来你想学习 Web 框架、CSS 还是 JavaScript?

我想学习如何用框架创建 Python Web 应用。

我的应用可以运行但是很难看。如何美化用户界面?

在我的 Python Web 应用中如何使用 JavaScript?

在这里注册以便每月能收到一份邮件资料,内容包含本站的主要更新、教程和 Python 书籍的打折码等。