Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blogpython
用 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 语法基础快速概览 git
{{ post.date | default("2016-11-22") }}
{{ '' | default('String', True)}}
将传入变量代码块中的值转换为浮点数,相似于 Python 的 float()github
{{ 75 | float }}
相似于 Python 的 int()web
{{ 75.5 | int }}
相似于 Python 中的 len()数据库
The Count: {{ post.tags | lenght }}
将传入变量代码块的 String 的首字母转换成大写,成为一个合格的 Title。express
{{ "post title" | title }}
相似于 Python 的 round() 定义浮点数的精度。django
{{ 3.14159 | round(1) }}
{{ 4.7 | rount(1, "common")}}
将传入变量代码块的列表变量中的元素做为字符串链接起来,相似于 Python 的 join()json
{{ ['JmilkFan', 'fanguiju' ] | join(',')}}
过滤器 tojoin 其实是调用了 Python 的 json.dumps 函数来序列化对象,同样的须要确保传入变量代码块的是一个能够被序列化的对象 Dict。flask
{{ {"key": "value" | tojson }}}
若是咱们采用将 SQLAlchemy models 的查询对象直接传入模板文件中进行渲染的方式来生成整个 HTML 页面时,咱们就会经常使用到 tojson 过滤器,并且咱们还须要将序列化后的结果进行 safe 处理,才能保证其安全性。浏览器
{{ posts | tojson | safe }}
用于截取指定长度的 String 对象,并在截取后的子字符串后添加省略号。
{{ "a long stringggggggggggggggggg " | truncate(5) }}
若是传入变量代码块的是 HTML 字符串,则将该字符串中的 &、<、>、’、” 做为 HTML 的转义序列打印。
{{ "<h1>Title<\h1>" | escape }}
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)
app.jinja_env.filters['count_substring'] = count_substring_from_python
{{ variable | filter_name("String") }}
将过滤器函数 count_substring_from_python
映射成为过滤器 count_substring
这些 Flask 特殊的变量和方法,都是能够在模板文件中直接访问的。
config 对象就是 Flask 的 config 对象,也就是 app.config 对象,其包含了 class DevConfig 的属性。
{{ config.SQLALCHEMY_DATABASE_URI }}
就是 Flask 中表示当前请求的 request 对象。
{{ request.url }}
就是 Flask 的 session 对象。
{{ session.new }}
url_for()
会返回传入的路由函数对应的 URL,所谓的路由函数就是被 app.route()
路由装饰器装饰的函数。EG. main.py 中的 home()。
{{ url_for('home') }}
/post/1024
,则能够将这些参数做为命名参数传入:{{ url_for('post', post_id=1024) }}
返回以前在 Flask 中经过 flash()
传入的信息列表,相似实现一个队列。EG. 把 Python String 对象表示的消息加入到一个消息队列中,而后经过调用 get_flashed_messages()
方法来逐一取出并消费掉。
{% for message in get_flashed_messages() %} {{ message }} {% endfor %}
NOTE: 前提是该消息队列是由 flash()
来生成的。