flask 使用模板
3.1 jinjia2
P21 EN,P19 CHS
- 业务逻辑 后台 business logic
- 表现逻辑 前端 presentation logic
前后端分离,一个和数据库mysql打交道,一个和浏览器html打交道。
3.1.1 渲染,模板
把表现逻辑交给模板处理.
渲染:用上下文中的值替换占位符
app中的表现函数调用render_template函数来渲染模板。
如:
return render_template('user.html', name=name)
模板文件位置/templates/*.html
3.1.2变量
本文用到的jinja语法 会导致hexo博客引擎无法渲染,需要用包起来
写在模板里的占位符:
{{variable}}
变量可以是各种类型,list dict object
可以通过filter对变量进行处理, 如{{name|capitalize}},首字母大写. 需要注意safe过滤器,safe处理就是不转义(escape)
filter列表见: jinja builtin-filters
#### 3.1.3 控制语句
这里就看不懂符号的意思了,jinjia2教程:http://docs.jinkan.org/docs/jinja2/
* 块{% %}
* 变量{{}}
* 注释{# #}
jinja提供的控制渲染过程的语句:
{%if user%}
hello{{user}}!
{%endif%}
{% for comment in comments %}
{{comment}}
{%endfor%}
支持宏,类似函数
可以包含include来导入单独文件中的宏
可以定义基模板,然后继承.
block标签在基模板中定义的部分在用extends继承后可以修改.
{{super()}}获取基模板中定义的内容
### 3.2flask集成bootstrap
pip install flask-bootstrap
./app.py
from flask.ext.bootstrap import Bootstrap
bootstrap=Bootstrap(app)
初始化之后就可以使用包含bootstrap的基模板,在html中:
{%extends "bootstrap/base.html"%}
bootstrap的jinjia模板 base.html的路径(venv)是:
venv/lib/python2.7/site-packages/flask_bootstrap/templates/bootstrap/base.html
导入基模板.用到的bootstrap的元素到其官网看文档.
http://getbootstrap.com/getting-started/
http://bootstrap.ninghao.net/getting-started.html
http://www.runoob.com/bootstrap/bootstrap-intro.html
base.html定义了很多块,都可以在衍生模板中继承。
继承后保留之前模板中的部分
{{super()}}
### 3.3 自定义404页面
404错误,500错误
在app.py中:
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'),404
继承(inheritance),DRY,减少重复代码
代码见:/templates/base.html, content部分是一个空的block
然后在/templates/404.html中继承.
在vps上需要设置nginx 使用自己的404页面.
### 3.4 生成链接
动态路由
url_for() 函数按照url map中保存的信息返回url字符串
生成完整路径: url_for(page,_external=True)
### 3.5 静态文件
加入favcon为例:
/templates/base.html
{% raw %}
{% block head%}
{{super()}}
{% endblock%}
{% endraw %}
3.6 处理时间
moment.js在浏览器中渲染时间
pip install flask-moment
用到再来.