[学习flask]3,模板

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

    用到再来.