# 关于模板
# Jinja
:一种基于 Python 的文本模板语言。
- 官方文档 (opens new window)
- 由 Flask 的作者开发,最初是模仿 Django 的 DTL 模板语言,用于处理 HTML 文件,后来推广到处理各种类型的文本文件。
# 语法
- 三种定界符:
{{ }} # 用于读取变量的值,并嵌入模板文本中 {% %} # 用于执行指令 {# #} # 用于声明单行注释
- 渲染模板文件时会删除所有注释。
- 声明多行注释的方法:
{% comment %} This is a comment. {% endcomment %}
# 变量
例:
{% set a='Hello' %} # 创建变量 {% set b=a %} # 将变量赋值给另一个变量 {{ b }} # 读取变量的值
- 如果读取的变量不存在,则取值为空字符串。
变量可以是 Python 中任意类型的对象,可以调用该对象的属性、方法:
{{ name }} # 读取变量 {{ name.__doc__ }} # 调用属性 {{ name.encode() }} # 调用方法 {{ dict1['A'] }} # 读取字典 {{ list1[0] }} # 读取列表
# 控制结构
if 语句:
{% if a is defined %} # 判断变量是否已定义 AAA {% elif not b %} BBB {% else %} CCC {% endif %}
{{ True if a else False }} {{ a or 'Hello' }} # 为变量设置默认值
迭代列表:
<ul> {% for i in list1 %} <li>{{ i }}</li> {% endfor %} </ul>
迭代字典:
<dl> {% for k, v in dict1.items() %} <dt>{{ k }}</dt> <dd>{{ v }}</dd> {% endfor %} </dl>
继承:
{% extends "base.html" %} # 继承 base.html 的内容 {% block head %} # 定义一个 block 块,如果继承的父文件中存在同名的 block ,则会覆盖它 {{ super() }} # 插入父文件中同名的 block 的内容 <title>Hello</title> {% endblock %}
# import jinja2
:Python 的第三方库,提供了 Jinjia 模板引擎。
安装:
pip install Jinja2
例:
>>> from jinja2 import Template >>> text = "Hello {{a}}" >>> template = Template(text) # 根据字符串创建模板 >>> template.render(a='Word') # 传入变量,渲染模板并返回 'Hello Word'
可以合并成一步:
>>> Template('Hello {{a}}').render(a='Word') 'Hello Word' >>> Template('Hello {{b}}').render(a='Word') # 变量 b 不存在,因此读取到的值为空字符串 'Hello ' >>> Template('Hello {{a, b}}').render(a='Word') # 这里相当于读取元组 (a, b) 的值 "Hello ('Word', Undefined)"
调用 render() 时可以传入关键字形式的参数,也可以传入一个字典:
template.render(a='Word') template.render({'a':'World'})
# Markdown
:一种对文本进行简单排版的标记语言。
- 虽然用 HTML 语法能编写 Web 网页,但语法繁琐、不方便供人编写。而 Markdown 相当于简化版的 HTML 语法。
- 当用户用 Markdown 语法编写一个文本文件之后,可以用 Markdown 阅读器处理,渲染成 HTML 页面。
# 语法
Markdown 格式的文本文件的扩展名为 .md 。
Markdown 兼容 HTML 的语法,比如插入
<p>
标记。换行
- 在 Markdown 文档中输入连续多个空格时,只会显示一个空格。
- 在 Markdown 文档中输入连续多个空行时,只会显示一个空行。
- 在行尾加上一个 \ ,可以在显示时强制换行。
标题
- 一行以井号 + 空格开头,会显示成标题,采用大写、粗体字体。
- 行首井号的数量从 1 到 6 ,对应一级标题到六级标题,字号依次递减。
- 例:
# 一级标题 ### 二级标题 #### 三级标题
字体:
- 在字符串前后加上连续 n 个星号 * 或下划线 _ ,会显示成特殊字体。
- 例:
普通字体 *斜体* _斜体_ **粗体** __粗体__ ***斜粗体*** ___斜粗体___ ~~删除线~~
无序列表
- 连续多行以
* - +
三者之一的符号 + 空格开头,会显示成无序列表。 - 行首可以加上空格缩进,从而显示出多个层级。
- 例:
* sentence * sentence - sentence - sentence + sentence + sentence
- 连续多行以
有序列表
- 连续多行以阿拉伯数字 + 小数点 + 空格开头,会显示成无序列表。
- 例:
1. sentence 2. sentence 3. sentence
表格
- :连续多行,每列字段用 | 作为分隔符。第一行是表头。第二行的每列内容为 - ,用于确定整个表格的总列数。
key | Value - | - a | 1 b | 2 c | 3
- :连续多行,每列字段用 | 作为分隔符。第一行是表头。第二行的每列内容为 - ,用于确定整个表格的总列数。
引用
- 一行以大于号 > 开头,会显示成单行引用。
- 段首以四个以上的空格开头时,会显示成一个缩进的区块。
代码
- 在字符串前后加上反引号 ` 作为定界符,会加亮显示。如下:
请在终端输入命令 `ls -l`
- 在文本前后加上三个反引号 ``` ,会显示成代码块。还可在开头加上编程语言的名称,让代码块根据语法高亮显示多种颜色。如下:
print('hello')
- 在字符串前后加上反引号 ` 作为定界符,会加亮显示。如下:
链接
- 有多种格式:
<https://www.baidu.com> [一个超链接](https://www.baidu.com) ![一张图片](1.png) ![一张图片,居中显示且限制尺寸](1.png#pic_center =60x60)
- 有多种格式:
如果要显示 Markdown 语法中的保留字符,则需要用反斜杠转义,如下:
\< \* \#
显示反引号时,要用两个反引号作为定界符:
`` Hi` ``
还有一些扩展语法,MarkDown 阅读器不一定支持:
[TOC] <!-- 显示目录,这会收集当前文档的各个标题 --> x^2^ <!-- 上标 --> H~2~O <!-- 下标 --> ==Notice== <!-- 高亮显示 --> --- <!-- 显示一行水平分割线 -->
# import markdown2
:Python 的第三方库,用于将采用 Markdown 语法的文本,渲染成采用 HTML 语法的文本。
安装:
pip install markdown2
例:
>>> import markdown2 >>> markdown2.markdown('# 一级标题') '<h1>一级标题</h1>\n'
可以在 shell 终端执行命令,渲染一个文件:
python -m markdown2 test.md > test.html