摘要:使用真實(shí)值替代變量,再返回最終得到的響應(yīng)字符串,這一過(guò)程成為渲染。渲染模板渲染模板提供的函數(shù)把模板引擎集成到了程序中。隨后的參數(shù)都是鍵值對(duì),表示模板中變量對(duì)應(yīng)的真實(shí)值。程序現(xiàn)在使用的模板繼承自不是直接繼承自的基模板。
本系列筆記是我閱讀Miguel Grinberg的《Flask Web Development》的筆記,標(biāo)題與書(shū)本同步。希望通過(guò)記錄技術(shù)筆記的方式促進(jìn)自己對(duì)知識(shí)的理解。
本篇對(duì)應(yīng)書(shū)本第三章:模板。
Jinja2模板引擎模板是一個(gè)包含響應(yīng)文本的文件,其中包含用占位變量表示的動(dòng)態(tài)部分,其具體值只在請(qǐng)求的上下文中才能知道。使用真實(shí)值替代變量,再返回最終得到的響應(yīng)字符串,這一過(guò)程成為渲染。
Flask渲染模板使用的是Jinja2模板引擎。
渲染模板hello.py 渲染模板 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) # Flask提供的render_template函數(shù)把Jinja2模板引擎集成到了程序中。 # render_template函數(shù)的第一個(gè)參數(shù)是模板的文件名。 # 隨后的參數(shù)都是鍵值對(duì),表示模板中變量對(duì)應(yīng)的真實(shí)值。
模板中使用的{{ name }}結(jié)構(gòu)表示一個(gè)變量,它是一種特殊的占位符,告訴模塊引擎這個(gè)位置的值從渲染模板時(shí)使用的數(shù)據(jù)中獲取。
Jinja2能識(shí)別所有類型的變量,示例:
變量過(guò)濾器A value from a dictionary:{{ mydict["key"]}}.
A value from a list:{{ mylist[3]}}.
A value from a list,with a variable index:{{ mylist[myintvar] }}.
A value from an object"s method: {{ myobj.somemethod() }}.
過(guò)濾器名添加在變量之后,中間使用豎線分隔。
hello, {{ name|capitalize }}
常用過(guò)濾器:
過(guò)濾器名 | 說(shuō)明 |
---|---|
safe | 渲染值時(shí)不轉(zhuǎn)義 |
capitalize | 把值得首字母轉(zhuǎn)換成大寫(xiě),其他字母轉(zhuǎn)換成小寫(xiě) |
lower | 把值轉(zhuǎn)換成小寫(xiě)形式 |
upper | 把值轉(zhuǎn)換成大寫(xiě)形式 |
title | 把值中每個(gè)單詞的首字母都換成大寫(xiě) |
trim | 把值的首位空格去掉 |
striptags | 渲染之前把值中所有的HTML標(biāo)簽都刪掉 |
{% if user %} Hello,{{ user }}! {% else %} Hello, Stranger! {% endif %}渲染一組元素
{{% macro render_comment(comment)%}}
{% include "common.html" %}模板繼承
- 建一個(gè)名為base.html的基模板 {% block head %}使用Flask-Bootstrap集成Twitter Bootstrap{% block title %}{% endblock %} - My Application {% endblock %} {% block body %} {% endblock %} - 衍生模板中修改block標(biāo)簽定義的元素 {% extends "base.html" %} #定義基模板 {% block title%}Index{% endblock %} #修改title塊內(nèi)容 {% block head %} #修改head塊內(nèi)容 {{ super() }} #原來(lái)head中有內(nèi)容,用super()獲取原來(lái)的內(nèi)容 {% endblock %} {% block body %} #修改body塊內(nèi)容Hello, World!
{% endblock %}
安裝Flask-Bootstrap擴(kuò)展Bootstrap是Twitter開(kāi)發(fā)的一個(gè)開(kāi)源框架,它提供用戶界面組件可用于創(chuàng)建整潔且具有吸引力的網(wǎng)頁(yè),而且這些網(wǎng)頁(yè)還能兼容所有現(xiàn)代Web瀏覽器。Bootstrap是客戶端框架,不會(huì)直接涉及服務(wù)器??梢栽谀0逯幸肂ootstrap的CSS和JavaScript文件。
(venv)$ pip install flask-bootstrap hello.py: 初始化Flask-Bootstrap from falsk_bootstrap import Bootstrap # ... bootstrap = Bootstrap(app)使用Flask-Bootstrap的模板
{% extends "bootstrap/base.html" %} {% block title%}Flasky{% endblock %} {% block navbar %}Flask-Bootstrap基模板中定義的塊 {% endblock %} {% block content %}{% endblock %} # 模板利用Bootstrap中的樣式進(jìn)行了修改Hello,{{ name }}!
塊名 | 說(shuō)明 |
---|---|
doc | 整個(gè)HTML文檔 |
html_attribs | 標(biāo)簽的屬性 |
html | 標(biāo)簽中的內(nèi)容 |
head | 標(biāo)簽中的內(nèi)容 |
title | |
metas | 一組標(biāo)簽 |
styles | 層疊樣式表定義 |
body_attribs | 標(biāo)簽的屬性 |
body | 標(biāo)簽中的內(nèi)容 |
navbar | 用戶定義的導(dǎo)航條 |
content | 用戶定義的頁(yè)面內(nèi)容 |
scripts | 文檔底部的JavaScript聲明 |
利用Jinja2的模板繼承機(jī)制可以讓templates/base.html繼承自bootstrap/base.html。
{% extends "bootstrap/base.html" %} {% block title %}Flasky{% endblock %} {% block navbar %}{% endblock %} {% block content %}{% block page_content %}{% endblock %}{% endblock %}程序現(xiàn)在使用的模板繼承自templates/base.html不是直接繼承自Flask-Bootstrap的基模板。
404錯(cuò)誤頁(yè)面:繼承自templates/base.html {% extends "base.html" %} {% block title %}Flasky - Page Not Found{% endblock %} {% block page_content %}鏈接{% endblock %} user頁(yè)面:繼承自templates/base.html {% extends "base.html" %} {% block title %}Flasky{% endblock %} {% block page_content %}Not Found
{% endblock %}Hello, {{ name }}!
Flask提供了url_for()輔助函數(shù),它可以使用程序URL映射中保存的信息生成URL。
url_for函數(shù)最簡(jiǎn)單的用法:以視圖函數(shù)名作為參數(shù),返回對(duì)應(yīng)的URL。url_for("index")得到的結(jié)果是"/"
使用url_for生成動(dòng)態(tài)地址時(shí),將動(dòng)態(tài)部分作為關(guān)鍵字參數(shù)傳入。
url_for("user",name="john",_external=True)
函數(shù)能將任何額外參數(shù)添加到查詢字符串中。
靜態(tài)文件 使用Flask-Moment本地化日期和時(shí)間Flask-Moment是Flask的一個(gè)程序擴(kuò)展,能夠在瀏覽器中渲染日期和時(shí)間。
安裝Flask-Moment
(venv)$ pip install flask-momenthello.py:初始化Flask-Moment
from flask_moment import Moment moment = Moment(app)templates/base.html: 引入 moment.js庫(kù)
{% block scripts %} {{ super() }} {{ moment.include_moment() }} {% endblock %}hello.py: 加入一個(gè)datetime變量
from date.time import datetime @app.route("/") def index(): return render_template("index.html",current_time=datetime.utcnow())templates/index.html: 使用Flask-Moment渲染時(shí)間戳
The local date and time is {{ moment(current_time).format("LLL") }}.
That was {{ moment(current_time).fromNow(refresh=True) }}.
本文由?EverFighting?創(chuàng)作,采用?**[知識(shí)共享署名 3.0 中國(guó)大陸許可協(xié)議]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/38104.html
摘要:我們的論壇項(xiàng)目就使用了該框架。此外,麥子學(xué)院也有一個(gè)入門(mén)視頻教程,一共小時(shí)的視頻教程,涵蓋開(kāi)發(fā)的方方面面,包括環(huán)境的搭建,語(yǔ)法介紹,項(xiàng)目結(jié)構(gòu)的組織,全球化,單元測(cè)試等內(nèi)容。博客地址更多閱讀的機(jī)制三個(gè)框架的對(duì)比 前面兩篇文章中我們已經(jīng)了解 Web(HTTP)服務(wù)器,Web應(yīng)用程序,Web框架,WSGI這些 Python Web 開(kāi)發(fā)中的概念。我們知道,Web框架通過(guò)將不同Web應(yīng)用程序中...
摘要:處理和函數(shù)之間關(guān)系的程序稱為路由。模板引擎是由實(shí)現(xiàn)的是內(nèi)置的模板語(yǔ)言參照設(shè)計(jì)思想設(shè)計(jì)的,跟差不多渲染模板默認(rèn)情況下,在程序文件夾中的子文件夾中尋找模板。如果需要可在文件夾中使用子文件夾存放文件。 1 程序的基本結(jié)構(gòu) 1.1初始化 所有Flask 程序都必須創(chuàng)建一個(gè)程序?qū)嵗?。Web 服務(wù)器使用一種名為Web 服務(wù)器網(wǎng)關(guān)接口(Web Server Gateway Interface,WSG...
摘要:和是最受歡迎的。虛擬環(huán)境將允許將項(xiàng)目依賴項(xiàng)與本地機(jī)器依賴項(xiàng)隔離開(kāi)來(lái)。文件將是項(xiàng)目中的主文件。運(yùn)行后,檢查本地主機(jī)。在中創(chuàng)建一個(gè)名為的文件夾,并創(chuàng)建一個(gè)名為的文件夾。部署創(chuàng)建帳戶為前端和全棧應(yīng)用程序提供免費(fèi)部署服務(wù)。 ...
摘要:簡(jiǎn)介官網(wǎng)上對(duì)它的定位是一個(gè)微開(kāi)發(fā)框架。另外一個(gè)必須理解的概念是,簡(jiǎn)單來(lái)說(shuō)就是一套和框架應(yīng)用之間的協(xié)議。功能比較豐富,支持解析自動(dòng)防止攻擊繼承變量過(guò)濾器流程邏輯支持代碼邏輯集成等等。那么,從下一篇文章,我們就正式開(kāi)始源碼之旅了 文章屬于作者原創(chuàng),原文發(fā)布在個(gè)人博客。 flask 簡(jiǎn)介 Flask 官網(wǎng)上對(duì)它的定位是一個(gè)微 python web 開(kāi)發(fā)框架。 Flask is a micro...
摘要:示例如下靜態(tài)路由使用動(dòng)態(tài)變量的路由未指定變量類型使用動(dòng)態(tài)變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數(shù)參數(shù)傳入進(jìn)來(lái)。 開(kāi)始決定認(rèn)真的在網(wǎng)上寫(xiě)一些東西,主要原因還是在于希望能提升學(xué)習(xí)效果。雖說(shuō)python寫(xiě)了有幾年,但是web后端框架的確沒(méi)怎么接觸過(guò),買了本狗書(shū)寥寥草草的過(guò)了一遍,發(fā)現(xiàn)很多東西還是理解不深,真的是好記性不如爛筆頭,知識(shí)也要從基礎(chǔ)開(kāi)始,退回來(lái)好好看看官方文檔,再...
閱讀 1642·2023-04-26 02:50
閱讀 3628·2023-04-26 00:28
閱讀 2010·2023-04-25 15:18
閱讀 3280·2021-11-24 10:31
閱讀 1083·2019-08-30 13:00
閱讀 1072·2019-08-29 15:19
閱讀 1836·2019-08-29 13:09
閱讀 3043·2019-08-29 13:06