Flask Web笔记(三)- 模版

模版

业务逻辑和表现逻辑
把表现逻辑单独的放到模版中去,提升可维护性

Jinja2 模板

模版的一种,包含响应文本的文件

渲染模版

Hello world

Hello, {{ name }} !

from flask import Flask, render_template

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/user/')
def user(name):
      return render_template('user.html', name=name)

变量

  • 变量
      {{ name }}
    
  • 变量过滤器
    • capitalize
       {{ name|capitalize }}
      
    • safe: 渲染时不转义
    • low
    • upper
    • title: 值中每个单词的首字母都转为大写
    • trim
    • striptags:渲染之前把值中所有的HTML标签都删掉

控制结构

  • if else结构
{% if user %}
      Hello, {{ user }}
{% else %}
     Hello, Stranger!
{% endif %}
  • for 循环
    {% for comment in comments %}
  • {{ comment }}
  • {% endfor %}
  • macro -宏
{% macro render_comment(comment) %}
     
  • {{ commont }}
  • {%endmacro%}
      {% for comment incomments %} {{ render_comment(comment) }} {% endfor %}
    #使用宏 {% import 'macros.html' as macros %}
      {% for comment in comments %} {{ macros.render_comment(comment) }} {% endfor %}
    • 重复使用的片段可以放在单独的文件中然后在使用的地方include
    {% include 'common.html' %}
    
    • 模版继承
    #base.html
    
    
    {% block head %}
    {% block title %}{% endblock %} - My Application
    {% blockend %}
    
    
    {% block body %}
    {% endblock %}
    
    
    
    #继承模版
    {% extends "base.html" %} 
    {% block title %} Index {% endblock %} 
    {% block head %} 
    {{ super() }} 
     
    {% endblock %} {% block body %} 
        

    Hello, World!

    {% endblock %}

    Twitter Bootstrap

    • install
    pip install flask-bootstrap
    
    • 初始化
    from flask.ext.bootstrap import Bootstrap
    
    bootstrap = Bootstrap(app)
    
    • 使用
    {% extends "bootstrap/base.html" %}
    {% block head %}
    {{ super() }}
    
    
    {% endblock %}
    {% block scripts %}
    {{ super() }}
    {{ moment.include_moment() }}
    {% endblock %}
    {% block title %}Flasky{% endblock %}
    
    {% block navbar %}
    
    {% endblock %}
    
    {% block content %}
    
    {% block page_content %}{% endblock %}
    {% endblock %}

    自定义错误页面

    • 404:客户端请求未知页面或路由
    @app.errorhandler(404)
    def page_not_found(e):
         return render_template('404.html'), 404
    
    • 500:有未处理异常时显示
    @app.errorhandler(500)
    def internal_server_error(e):
         return render_template('500.html'), 500
    

    链接

    使用url_for()生成动态地址

    • url_for('user',name='john', _external=True)
      结果为 http://localhost:5000/user/john
    • url_for('index',page=2)
      http://localhost:5000/?page=2

    Flask-Moment 本地化日期和时间

    • install
    pip install flask-moment
    
    • init
    from flask.ext.moment import Moment
    moment = app(Moment)
    
    • html中的使用

    The local date and time is {{ moment(current_ time).format(' LLL') }}.

    That was {{ moment(current_time).fromNow(refresh=True) }}

    你可能感兴趣的:(Flask Web笔记(三)- 模版)