Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog

目录

前文列表

用 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 管理数据库结构的升级和降级

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

Jinja 中常用的过滤器

default

  • 如果传入变量代码块的值为 None,则传入默认值:
{{ post.date | default("2016-11-22") }}
  • 若希望传入变量代码块的值为 False 时,使用默认值,可以将 True 传入 default 过滤器的第二个参数 。
{{ '' | default('String', True)}}

float

将传入变量代码块中的值转换为浮点数,类似于 Python 的 float()

{{ 75 | float }}

int

类似于 Python 的 int()

{{ 75.5 | int }}

lenght

类似于 Python 中的 len()

The Count: {{ post.tags | lenght }}

title

将传入变量代码块的 String 的首字母转换成大写,成为一个合格的 Title。

{{ "post title" | title }}

round

类似于 Python 的 round() 定义浮点数的精度。

{{ 3.14159 | round(1) }}
  • common 参数:四舍五入
  • floor 参数:截取整数部分
  • ceil 参数:向上取整
{{ 4.7 | rount(1, "common")}}

join

将传入变量代码块的列表变量中的元素作为字符串连接起来,类似于 Python 的 join()

{{ ['JmilkFan', 'fanguiju' ] | join(',')}}

tojson

过滤器 tojoin 实际上是调用了 Python 的 json.dumps 函数来序列化对象,一样的需要确保传入变量代码块的是一个可以被序列化的对象 Dict。

{{ {"key": "value" | tojson }}}

如果我们采用将 SQLAlchemy models 的查询对象直接传入模板文件中进行渲染的方式来生成整个 HTML 页面时,我们就会常常使用到 tojson 过滤器,而且我们还需要将序列化后的结果进行 safe 处理,才能保证其安全性。

{{ posts | tojson | safe }}

truncate

用于截取指定长度的 String 对象,并在截取后的子字符串后添加省略号。

{{ "a long stringggggggggggggggggg " | truncate(5) }}

escape

如果传入变量代码块的是 HTML 字符串,则将该字符串中的 &、<、>、’、” 作为 HTML 的转义序列打印。

{{ "<h1>Title<\h1>" | escape }}

safe

safe 过滤器含有 escape 的功能,将传入到变量代码块中的 HTML 字符串中的特殊符号进行 HTML 转义,这是必要的安全手段

假如我们需要直接将 HTML 作为变量传入到变量代码块中,而且这个传入的接口是公开的话,我们就需要防止用户提交恶意的 HTML 代码。如果 Jinja 没有 HTML 转义功能的话,那么我们访问这个变量代码块的时候就会运行这些被提交的恶意 HTML 代码了。EG. 一个用户在回复框输入了含有 Script 标签的 HTML 代码,那么所有打开该页面的浏览器都会执行这些 Script。

但有一个问题就是:在有些情况下我们不应该对 HTML 进行转义且需要保证安全性的,对于这个问题,escape 过滤器是无法解决的。所以 Jinja 提供了 safe 过滤器。

{{ "<h1>Post Title"</h1> | safe }}

自定义过滤器

在 Jinja 中自定义一个过滤器,有如编写一个 Python 函数。

  • 定义过滤器函数
def count_substring_from_python(string, sub):
return string.count(sub)
  • 在 main.py 中声明过滤器函数
app.jinja_env.filters['count_substring'] = count_substring_from_python
  • 在模板文件中调用自定义过滤器
{{ variable | filter_name("String") }}

将过滤器函数 count_substring_from_python 映射成为过滤器 count_substring

Flask 的特殊变量和方法

这些 Flask 特殊的变量和方法,都是可以在模板文件中直接访问的。

config 对象

config 对象就是 Flask 的 config 对象,也就是 app.config 对象,其包含了 class DevConfig 的属性。

{{ config.SQLALCHEMY_DATABASE_URI }}

request 对象

就是 Flask 中表示当前请求的 request 对象。

{{ request.url }}

session 对象

就是 Flask 的 session 对象。

{{ session.new }}

url_for 方法

url_for() 会返回传入的路由函数对应的 URL,所谓的路由函数就是被 app.route() 路由装饰器装饰的函数。EG. main.py 中的 home()。

{{ url_for('home') }}
  • 如果我们定义的路由函数是带有参数的,EG. /post/1024,则可以将这些参数作为命名参数传入:
{{ url_for('post', post_id=1024) }}  

get_flashed_messages 方法

返回之前在 Flask 中通过 flash() 传入的信息列表,类似实现一个队列。EG. 把 Python String 对象表示的消息加入到一个消息队列中,然后通过调用 get_flashed_messages() 方法来逐一取出并消费掉。

{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}

NOTE: 前提是该消息队列是由 flash() 来生成的。

最新文章

  1. 快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,即USE方法
  2. java.lang.NoSuchFieldError 异常原因
  3. 【转载】Linux常用命令列表
  4. C# 小工具开发--DeBugHttp
  5. iOS coredata 级联删除
  6. Java的split方法说明
  7. javascript预编译
  8. spark source code 分析之ApplicationMaster overview(yarn deploy client mode)
  9. 你必须知道的261个Java语言问题
  10. BBS论坛(一)
  11. Python MetaClass深入分析
  12. HTML DOM 的nodeType属性
  13. Docker笔记——jdk镜像制作
  14. tp5 auth权限设置
  15. sql -- 移除数据中的换行符和回车符
  16. optimization.splitChunks 中,chunks 的3个值:all、async、initial 的含义
  17. js setInterval参数设置
  18. 002_分布式搜索引擎Elasticsearch的查询与过滤
  19. Spring MVC freemarker使用
  20. css样式占位和不占位隐藏元素的方法

热门文章

  1. phpstorm中sass编译时目录或内容包含中文字符报错
  2. spring controller使用了@ResponseBody却返回xml
  3. webapi返回json格式优化 转载https://www.cnblogs.com/GarsonZhang/p/5322747.html
  4. Html5 学习笔记 --》css3 学习
  5. 嵌入式C语言3.2 关键字---自定义数据类型
  6. php Connection timed out after 30000 milliseconds
  7. css-目标伪类选择器:target的应用
  8. Ubuntu中安装jenkins+docker,实现项目部署
  9. Linux: 给右键菜单加一个“转换图片为jpg格式”
  10. Makefile总结(转帖)