模板
Flask框架默认使用Jinja2模板引擎,为了解决业务逻辑和表现逻辑
模板中的变量
<p>dictionary:{{mydict['key']}}</p>
<p>lsit:{{mylist[3]}}</p>
<p>list with index:{{mylist[myintvar]}}</p>
<p>Objcet's method:{{myobj.somemethod()}}</p>
#模板把变量的值变成首字母大写
Hello,{{name|capitalize}}
Jinja2变量过滤器
默认情况下,出于安全考虑,Jinja2会转义所有变量.
控制结构
{% if user %}
Hello,{{ user }}!
{% else %}
Hello,Stranger!
{% endif %}
for循环
<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% endfor %}
</ul>
Jinja2支持宏
{% macro render_comment(comment) %}
<li>{{ comment }}</li>
{% endmacro %}
<ul>
{% for comment in comments %}
{{render_comment(comment)}}
{% endfor %}
</ul>
重复使用宏
#把宏保存在单独的文件中,然后在需要使用的模板中导入
{% import 'macros.html' as macros%}
<ul>
{% for comment in comments %}
{{ macros.render_comment(commnet)}}
{% endfor %}
</ul>
需要重复使用的模板代码可以单独保存,在多文件中引入
{% include 'common.html' %}
模板继承
#base.html
<html>
<head>
{% block head %}
<title>{% block title %}{% endblock %} - My Application</title>
{% endblock %}
</head>
<body>
{% block body%}
{% endblock %}
</body>
</html>
衍生模板
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style>
</style>
{% endblock %}
{% block body %}
<h1>Hello,world</h1>
{% endblock %}
*使用flask-bootstrap
pip install flask-bootstrap
初始化Bootstrap
{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle"
data-toggle="collapse" data-target=".navbar-collpase">
<span class="sr-only">Toggle navigation</span>
<span class="ico-bar"></span>
<span class="ico-bar"></span>
<spanclass="ico-bar"></span>
</button>
<a class="navbar-brand" href="/">Flasky</a>
</div>
<div class="navbar-collpase collpase">
<ul class="nav navbar-nav">
<li><a href="/" >Home</a></li>
</ul>
</div>
</div>
</div>
{% endblock %}
{% block content %}
<div class="container">
<div class="page-header">
<h1>Hello,{{ name }}!</h1>
</div>
</div>
{% endblock %}
目录结构
templates
404.html
500.html
user.html
index.html
base.htmlhello.py
404.html
{% extends "base.html" %}
{% block title %}Flasky - Page Not Found{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>Not Found</h1>
</div>
{% endblock %}
500.html
{% extends "base.html" %}
{% block title %}Flasky - Page Not Found{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>Interval Error</h1>
</div>
{% endblock %}
base.html
{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
{% block head %}
{{ super() }}
<link rel="shortcut ico" href="{{url_for('static',filename='favicon.ico')}}" type="image/x-icon">
<link rel="icon" href="{{url_for('static',filename='favicon.ico')}} "type="image/x-icon">
{% endblock %}
{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle"
data-toggle="collapse" data-target=".navbar-collpase">
<span class="sr-only">Toggle navigation</span>
<span class="ico-bar"></span>
<span class="ico-bar"></span>
<span class="ico-bar"></span>
</button>
<a class="navbar-brand" href="/">Flasky</a>
</div>
<div class="navbar-collpase collpase">
<ul class="nav navbar-nav">
<li><a href="/" >Home</a></li>
</ul>
</div>
</div>
</div>
{% endblock %}
{% block content %}
<div class="container">
{% block page_content %}{% endblock %}
</div>
{% endblock %}
user.html
{% extends "base.html" %}
{% block title %}Flasky{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>Hello,{{ name }}!</h1>
</div>
{% endblock %}
index.html
{% extends "base.html" %}
{% block page_content%}
<div class="container">
<h1>Hello,World!</h1>
</div>
{% endblock %}
hello.py
from flask_bootstrap import Bootstrap
from flask import Flask,render_template
from flask_moment import Moment
app = Flask(__name__)
bootstrap = Bootstrap(app)
moment = Moment(app)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/<name>')
def user(name):
return render_template('user.html',name=name)
@app.errorhandler(404)
def page_nof_found(e):
return render_template('404.html'),404
@app.errorhandler(500)
def internal_server_error(e):
return render_template('500.html'),500