用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览

简介: #目录前文列表扩展阅读Jinja变量名注释控制语句if 语句循环过滤器无参数调用带参数调用宏定义宏调用宏结果兼容 JavaScript前文列表用 Flask 来写个轻博客 (1) — 创建项目 用...
#目录

前文列表

用 Flask 来写个轻博客 (1) — 创建项目
用 Flask 来写个轻博客 (2) — Hello World!
用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy
用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
用 Flask 来写个轻博客 (5) — (M)VC_SQLAlchemy 的 CRUD 详解
用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)
用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)
用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级

扩展阅读

Welcome | Jinja2 (The Python Template Engine)
欢迎来到 Jinja2 — Jinja2 2.7 documentation

Jinja

Jinja:是 Python 实现的模板语言。
模板语言:是一种被设计出来自动生成文档的简单文本格式。在模板语言中,一般都会把一些变量传给模板,来替换模板中特定位置上的预先自定义好的占位变量名。向相同的模板文件(HTML+Python)传入不同的变量,达到生成格式相同但内容不同的网页文件,这个生成的过程被称之为渲染

变量名

Jinja 中的变量名都会定义在 {{ variables }} 中,{{}} 被称之为变量代码块

<h1>{{ user.username }}</h1>

变量代码块中可以是任意的 Python 对象或类型,唯一的条件就是 {{}} 中的变量必须能够被 Python 的 str() 内置方法转换成一个 String 类型对象。

注释

注释代码块使用 {# Documents #} 来表示。

控制语句

使用 {% controller_flow %} 来定义控制语句,{%%} 被称之为控制代码块,可以实现一些语言层次的功能。

if 语句

{% if user.is_logged_in() %}
    <a href='/logout'>Logout</a>
{% else %}
    <a href='/login'>Login</a>
{% endif %}

循环

我们可以正常的循环迭代器或生成器函数。

  • NOTE 1:在 Jinja 中需要同时使用循环语句和 if 语句来模拟 continue 语句的功能。
{% for post in posts if post.text %}
    <div>
        <h1>{{ post.title }}</h1>
        <p>{{ post.text | safe }}</p>
    </div>
{% endfor %}
  • NOTE 2:可以使用 Jinja 提供的 loop 变量来模型 Python 中的 enumerate() 内置函数的功能。 loop 变量可以返回一些关于 for 循环的信息,EG. 索引号。
{% for post in posts %}
    {{ loop.index }}-{{ post.title }}
{% endfor %}

过滤器

Jinja 过滤器实质上是 Jinja 提供的内置函数或自定义函数,这些内置函数与 Python 函数的类型,可以接收参数并返回结果。常用于处理变量代码块中的变量。在变量代码块中使用管道符 | 来调用。

无参数调用

{{ variable | filter_name }}

带参数调用

{{ variables | filter_name(*args) }}
  • NOTE 1:过滤器也可以在控制代码块 {%%} 中使用。
{% filter filter_name %}
    codes
{% endfilter %}

这样的话就可以对控制代码块中的代码进行处理。

:会返回一个 Jinja 模板或 HTML 字符串。其最主要的功能就是提高代码的重用性,我们可以将一个会被反复使用到的模板或 HTML 文件写成一个宏,然后就像调用函数一般,不断的被重用。

定义宏

{% macro input(name, label, value='', type='text')%}
    <div class="form-group">
        <label for"{{ name }}">{{ label }}</div>
        <input type="{{ type }}" name="{{ name }}"
            value="{{ value | escape }}" class="form-control">
    </div>
{% endmacro %}

这是一个带有 label 标签变量的 Bootstrao VSS 输入框。

  • input():是宏的名字,类似于函数名
  • (name, label, value='', type='text'):是宏的参数,类似于函数的必备参数和缺省参数

调用宏

{{ input('name', 'Name') }}

结果

    <div class="form-group">
        <label for"name">Name</div>
        <input type="text" name="name"
            value="" class="form-control">
    </div>

实际上是想宏定义中的形参 name/label/value/type 传入实参 ‘name’/’Name’,其余的使用了缺省参数,而这些被传入的参数会替换 HTML 中的变量代码块。

兼容 JavaScript

如果希望将 JavaScript 代码和 Jinja 代码写在同一个模板文件中而不引起混淆(JavaScript 也含有 {{}} 语法),需要使用 raw 代码块来进行区分。

{% raw %}
JavaScript statements
{% endraw %}
相关文章
|
缓存 前端开发 Python
Python Flask 编程 | 连载 07 - Jinja2 语法
Python Flask 编程 | 连载 07 - Jinja2 语法
Python Flask 编程 | 连载 07 - Jinja2 语法
|
存储 前端开发 Python
Python Flask 编程 | 连载 06 - Jinja2 语法
Python Flask 编程 | 连载 06 - Jinja2 语法
Python Flask 编程 | 连载 06 - Jinja2 语法
|
Web App开发 索引 Python
Flask入门模板Jinja2引擎与语法(四)
1 模板的创建 模板文件结构: project/ templates/ 模板文件 跳转模板一般使用: from flask import render_template,render_te...
|
关系型数据库 Shell 数据库
用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)
目录 目录 前文列表 扩展阅读 前期准备 多对多 使用样例 一直在使用的 session 前文列表 用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello World! 用 Flask 来写个轻博客...
906 0
|
数据库 Python 开发工具
用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级
目录 目录 前文列表 扩展阅读 Alembic 查看指令 manager db 的可用选项 初始化 DB Migrate 开始第一次跟踪 将记录文件应用到数据库中实时升级数据库结构 回滚到某一个记录环境中 前文列表 用 Flask 来写个轻博客 (1)...
1251 0
|
数据库 Python Shell
用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)
目录 目录 前文列表 扩展阅读 前言 一对多 再一次 sync db How to use 前文列表 用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello World! 用 Flask 来写个轻...
1397 0
|
Shell 数据库 Python
用 Flask 来写个轻博客 (5) — (M)VC_SQLAlchemy 的 CRUD 详解
目录 目录 前文列表 扩展阅读 SQLAlchemy 的 CRUD Create 增添数据 Retrieve 读取数据 限制返回记录的数目 返回记录的排序 查询函数的链式调用 Flask-SQLAlchemy 的专有分页函数 pagination Query 的过滤...
1540 0
|
关系型数据库 MySQL Shell
用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
目录 目录 前文列表 扩展阅读 定义数据模型 models 创建表 前文列表 用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello World! 用 Flask 来写个轻博客 (3) — (M)V...
1368 0
|
开发工具 git Python
用 Flask 来写个轻博客 (1) — 创建项目
目录 目录 前言 扩展阅读 部署开发环境 创建 Github 项目 前言 一步一步的实现一个 Flask 轻博客项目启动,最新的代码会上传到 Github。
1087 0
|
Python Shell
用 Flask 来写个轻博客 (2) — Hello World!
目录 目录 前文列表 扩展阅读 实现最简单的 Flask 应用 创建 configpy 文件 创建 mainpy 文件 使用 Flask Script 创建 managepy 文件 使用 manage 来运行开发环境服务器 确保 manage 的上下本中导入了...
1145 0