用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
#目录
前文列表
用 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 %}
用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览的更多相关文章
- 用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 Jinja 中常用的过滤器 default float int len ...
- 用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单
目录 目录 前文列表 实现 post 视图函数 在 posthtml 中添加表单 效果 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hell ...
- 用 Flask 来写个轻博客 (14) — M(V)C_实现项目首页的模板
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 实现所需要的视图函数 实现 home.html 模板 代码分析 实现效 ...
- 用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验
目录 目录 前文列表 WTForms WTF 的基础使用 常用的字段类型 fieldsDateField fieldsIntegerField fieldsFloatField fieldsStrin ...
- 用 Flask 来写个轻博客 (12) — M(V)C_编写和继承 Jinja 模板
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 使用 Bootstrap 编写 Jinja 模板文件 继承一 ...
- 用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数
目录 目录 前文列表 视图函数 在 viewspy 文件中定义视图函数 定义右侧边栏的视图函数 为每一张数据表定义视图函数 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask ...
- 用 Flask 来写个轻博客
用 Flask 来写个轻博客 用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello World! 用 Flask 来写个轻博客 (3) — (M)V ...
- 用 Flask 来写个轻博客 (37) — 在 Github 上为第一阶段的版本打 Tag
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 第一阶段结语 打 Tag 前文列表 用 Flask 来写个轻博客 (1 ...
- 用 Flask 来写个轻博客 (36) — 使用 Flask-RESTful 来构建 RESTful API 之五
目录 目录 前文列表 PUT 请求 DELETE 请求 测试 对一条已经存在的 posts 记录进行 update 操作 删除一条记录 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 ...
随机推荐
- c++primer,自定义一个复数类
#include<iostream> #include<string> #include<vector> #include<algorithm> #in ...
- 抓包工具charles下载安装(MAC版)
什么是charles? charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据.它允许一 ...
- Hibernate4教程二:基本配置
可编程的配置方式一: 如果在配置cfg.xml的时候,不想在里面配置hbm.xml怎么办呢?可在程序里使用可编程的配置方式,也就是使用程序来指定在cfg.xml里面的配置信息,不推荐这种方式.如下: ...
- 在docker中使用composer install
服务器上docker中没有装composer,只有项目中有composer.phar文件,但是又需要composer来管理依赖,我才接触docker 和 php的composer,希望把解决这个问题的 ...
- Vue小白篇 - ES6的语法
为什么要学 ES6 的语法呢? 因为 Vue 语法有很多都是 ES6(ECMAScript 6),这里推荐 [阮一峰 ECMAScript 6 入门]: http://es6.ruanyifeng.c ...
- Nginx Web 基础入门
目录 Nginx Web 基础入门 Nginx快速安装 两种方式部署Nginx 如何升级nginx或者添加功能 使用systemd管理nginx nginx相关配置文件 nginx的配置文件详解 虚拟 ...
- 拓展练习:Linux权限管理--基础权限/ 特殊权限
目录 基础权限拓展练习 特殊权限拓展练习 基础权限拓展练习 1.用户基础权限为9位,每三位为一组,每组代表着谁的权限? 前三位代表属主权限位 中间三位代表属组权限位 后三位代表其他用户权限位 2.权限 ...
- Robot Framework使用技巧之内部变量
[转载] 1.变量的使用 变量可以在命令行中设置,个别变量设置使用--variable (-v)选项,变量文件的选择使用--variablefile (-V)选项. 通过命令行设置的变量是全局变量,对 ...
- CNN基础四:监测并控制训练过程的法宝——Keras回调函数和TensorBoard
训练模型时,很多事情一开始都无法预测.比如之前我们为了找出迭代多少轮才能得到最佳验证损失,可能会先迭代100次,迭代完成后画出运行结果,发现在中间就开始过拟合了,于是又重新开始训练. 类似的情况很多, ...
- postgres之使用python连接并操作
取一万个随机数,插入数据库 import random import psycopg2 import string conn=psycopg2.connect(database='postgres', ...