Python Flask模組

來源:互聯網
上載者:User

標籤:路由   not   with   current   data   scripts   連結   usr   app   

模組是一個包含響應文本的檔案,其中包含佔用位變數表示的動態部分,其具體值只在請求的上下文中才知道。使用真實值替換變數,再返回最終得到的響應字串,這一過程稱為渲染。為了渲染模組,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 pythonfrom flask import Flask,render_templateapp = 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代碼中執行個體化所需組件。這些操作最理想的執行場所就是模板。

#初始化 Flask-bootstrapfrom 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">                <span class="sr-only">Toggle navigation</span>                <span class="icon-bar"></span>                <span class="icon-bar"></span>                <span class="icon-bar"></span>            </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 %}

 

三、自訂錯誤介面
#自訂錯誤介面#!/usr/bin/env pythonfrom flask import Flask,render_templateapp = 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‘),500if __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模板中。

#初始化Flask-Momentfrom flask.ext.moment import Momentmoment = Moment(app)
#引入moment.js庫{% block scripts %}{{ super() }}{{ moment.include_moment() }}{% endblock %}
#!/usr/bin/env pythonfrom flask import Flask,render_templateapp = Flask(__name__)from datetime import datetimefrom flask_moment import Momentmoment = Moment(app)@app.route(‘/‘)def index():    return render_template(‘index.html‘,                           current_time=datetime.utcnow())if __name__ == ‘__main__‘:    app.run()

  

Python Flask模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.