为了渲染模版,Flask使用了一个名为Jinja2的模版引擎。
一个简单的使用模版的栗子:
首先在工程文件夹下创建templates文件夹,里面放入两个模版:mainpage.html和user.html,内容如下:
mainpage.html
Hello Flask!
Hello Flask!
user.html
userpage
Hello Flask! Username is {{name}}!
# -*- coding: UTF-8 -*-
from flask import Flask,render_template
app=Flask(__name__)
#-------------------------------------------
@app.route('/')
def hello_falsk():
return render_template('mainpage.html')
@app.route('/user/')
def show_username(username):
return render_template('user.html',name=username)
#------------------------------------------
if __name__=='__main__':
app.run(debug=True)
以上是一个简单的小栗子。
在模版中使用控制结构:
以下是一个在模版中使用控制结构的栗子:
使用if else·············
#使用控制结构—— if esle
@app.route('/user/')
def show_username(username):
return render_template('user.html',name=username)
userpage
{% if name=="Molly" %}
Hello Flask! Username is {{name}}!
{% else %}
Hello Flask! Username is stranger!
{% endif %}
使用for········
#使用控制结构——for循环
@app.route('/sitemap')
def show_sitemap():
return render_template('sitemap.html',webmaplist=[1,2,3])
userpage
{% for page in webmaplist %}
Page:{{page}}
{%endfor%}
可以将sitemap.html转化为宏的模式:
{% macro show_page(page)%}
Page:{{page}}
{%endmacro%}
webmap
{% for page in webmaplist %}
{{show_page(page)}}
{%endfor%}
也可以将宏的部分保存在单独文件中,从需要的模版中导入:
{% import 'macro_test.html' as macros %}
webmap
{% for page in webmaplist %}
{{macros.show_page(page)}}
{%endfor%}
{% macro show_page(page)%}
Page:{{page}}
{% endmacro %}
模版可以继承,假设有一个base.html定义如下:
{% block head %}
{% block title %}{% endblock %}
{% endblock %}
Welcome ! -----
{% block body %}
{% endblock %}
定义了head、title和body的块,在其他html中可以继承并改变一些参数:
{% extends "base.html"%}
{% block title %}Hello Flask!{% endblock%}
{% block head%}
{{super()}}
{% endblock%}
{% block body%}
Hello Flask ! ! !
{% endblock%}
使用bootstrap
Bootstrap是Twitter 开发的一个开源框架,它提供的用户界面组件可用于创建整洁且具有吸引力的网页,而且这些网页还能兼容所有现代Web 浏览器。
以下是一个使用bootstrap的栗子:
# -*- coding: UTF-8 -*-
from flask import Flask,render_template
from flask_bootstrap import Bootstrap
app=Flask(__name__)
bootstrap=Bootstrap(app)
#----------------------------------------------------
@app.route('/')
def hello_falsk():
return render_template('mainpage_bootstrap.html')
#----------------------------------------------------
if __name__=='__main__':
app.run(debug=True)
{% extends "bootstrap/base.html"%}
{% block title %}My Flask Application{% endblock%}
{% block navbar %}
Hello, Flask!
{% endblock %}
{% endblock %}
{% block content %}
以下是bootstrap中base模版所有可用的块:
自定义错误界面的方法:
@app.errorhandler(404)
def error404(e):
return render_template('error_bootstrap.html'),404
@app.errorhandler(500)
def error500(e):
return render_template('error_bootstrap.html'),500
使用Moment
Flask-Moment库可以在浏览器中渲染日期和时间。
# -*- coding: UTF-8 -*-
from flask import Flask,render_template
from flask_bootstrap import Bootstrap
from flask_moment import Moment
from datetime import datetime
app=Flask(__name__)
moment=Moment(app)
bootstrap=Bootstrap(app)
#-----------------------------------------------------------------------------------------------------------------------
@app.route('/')
def hello_falsk():
return render_template('mainpage_moment.html',current_time=datetime.utcnow())
#-----------------------------------------------------------------------------------------------------------------------
if __name__=='__main__':
app.run(debug=True)
{% extends "base.html" %}
{% block title %}{{ super() }}{% endblock %}
{% block navbar %}{{ super() }}{% endblock %}
{% block content %}{{ super() }}{% endblock %}
{% block scripts %}
{{ super() }}
The local date and time is {{ moment(current_time).format('LLL') }}.
That was {{ moment(current_time).fromNow(refresh=True) }}
{% endblock %}
到目前为止,我们已经有了一个比较健全的base模版:
{% extends "bootstrap/base.html" %}
{% block title %}Flasky - My Application{% endblock %}
{% block navbar %}
Welcome to Flasky!
{% endblock %}
{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}
{% endblock %}
{% block content %}