BootstrapPython Flask模块

模块是一个带有响应文件的文本,其中蕴蓄占用位变量表示的动态部分,其具体值只在呼吁的上下文中才晓得。使用真实值替换变量,再回来最后获得的响应字符串,这一经过称为渲染。为了渲染模块,Flask使用一个名为Jinja2的兵不血刃模板引擎。

 

一、Jinja2模板引擎

花样最简便的Jinja2模板就是一个饱含响应文件的文本。

<h1>Hello,World!</h1>
<h1>Hello,{{name}}!</h1>

1、渲染模板

默许意况下,Flask在先后文件夹中的templates子文件夹中寻觅模板。在下一个hello.py版本中,要把前面定义的模板保存在templates文件夹中,并分别命名为index.html和user.html。

#!/usr/bin/env python

from flask import Flask,render_template
app = Flask(__name__)

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

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

if __name__ == '__main__':
    app.run()

Flask提供的render_template函数把Jinja模块引擎集成到了程序中。

 

2、变量

模板中动用的{{name}}结构意味着一个变量,它是一种特有的占位符,告诉模板引擎那一个职位的值从渲染模板时使用的数据中拿走。

Jinja2能辨识所有种类的变量,甚至是局部繁杂的类型,例如列表、字典和目的。在模板中利用变量的有的实例如下

<p>a value from a dictionary: {{ mydict['key'] }}</p>
<p>a value from a list:{{ mylist[3] }}</p>
<p>a value from a list,with a varliable index:{{ mylist[myintavr] }}</p>
<p>a value from a objects method:{{ myobj.somemethod() }}</p>

Jinja2变量过滤器

过滤器名 说明
safe 、渲染时不转义
capitalize
把值得首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首位空格去掉
striptags 渲染之前把值中所有HTML标签都删除

 

3、控制结构

在模板中选拔条件决定语句:

{% if user %}
    Hello,{{ user }}!
{% else %}
    Hello,Stranger!
{% endif %}

<ul>
    {% for commet in commets %}
        <li>{{ commet }}</li>
    {% end for %}
</ul>

Jinja2还辅助宏,类似于Python代码中的函数。例如:

{% macro render_commet(commet) %}
    <li>{{ commet }}</li>
{% endmacro %}

<ul>
    {% for commet in commets %}
        {{ render_commet(commet) }}
    {% endfor %}
</ul>

为了重新使用宏,大家得以将其保存在单独的文件中,然后在急需利用的沙盘中导入:

{% import 'macros.html' as macros %}
<ul>
    {% for commet in commets %}
        {{ macros.render_commet(commet) }}
    {% endfor %}
</ul>

另一种重复使用代码的强硬格局是模板继承,它好像于Python代码中的类继承。首先制造一个名为base.html的基模板:

<html>
<head>
    {% block head %}
    <title>{% block title %}{% endblock %} - My Application</title>
    {% endblock %}
</head>
<body>
    {% block body %}
    {% endblock %}
</body>
</html>

 

二、使用Flask-Bootstrap集成Twitter Bootstrp

Bootstrap是客户端架构,由此不会直接关乎服务器。服务器要做的文化提供引用了Bootstrap层叠样式表(CSS)和Javascript文件的HTML响应,并在HTML/CSS和Javascript代码中实例化所需组件。那几个操作最美丽的实施场面就是模板。

Bootstrap 1

#初始化 Flask-bootstrap

from flask.ext.bootstrap import Bootstrap
#...
bootstrap = Bootstrap(app)

初阶化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-collapse">
                Toggle navigation



            </button>
            <a class="navbar-brand" href="/">Flasky</a>
        </div>
        <div class="navbar-collapse collapse">
            <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 %}

Bootstrap, 

三、自定义错误界面

#自定义错误界面

#!/usr/bin/env python

from flask import Flask,render_template
app = Flask(__name__)

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'),404

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'),500

if __name__ == '__main__':
    app.run()

 

四:链接

Flask提供url_for()帮衬函数,它可以拔取程序URL映射中保留的新闻生成URL。

url_for()函数最简便易行的用法是以视图函数名(或者app.add_url_route()定义路由时利用的端点名)作为参数,重回对应的URL。

使用url_for()生成动态地址时,将动态部分作为重点字参数传入。例如,url_for(‘user’,name=’john’,_external=True)

 

五、静态文件

默许设置下,Flask在先后根目录中名为static的子目录中寻找静态文件。如若急需,可在static文件夹中使用子文件夹存放文件。

#定义收藏夹图标
{% block head %}
{{ super() }}
<link rel="shortcut icon" 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 %}

 

六、使用Flask-Moment本地化日期和时间

Flask-Moment是一个Flask程序扩大,能把moment.js集成到Jinja2模板中。

Bootstrap 2

#初始化Flask-Moment
from flask.ext.moment import Moment
moment = Moment(app)

#引入moment.js库
{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}

#!/usr/bin/env python

from flask import Flask,render_template
app = Flask(__name__)

from datetime import datetime
from flask_moment import Moment

moment = Moment(app)
@app.route('/')
def index():
    return render_template('index.html',
                           current_time=datetime.utcnow())

if __name__ == '__main__':
    app.run()

  

相关文章