摘要:模板模板引擎說明模板文件就是按照一定的規(guī)則書寫的展示效果的文件模板引擎就是負(fù)責(zé)按照指定規(guī)則進行替換的工具模板引擎選擇一渲染模板的方法將渲染的模板進行返回渲染字符串返回實例將模板內(nèi)容響應(yīng)給用戶渲染一內(nèi)容響應(yīng)給用戶原諒色二模板的語法模板中只存
day2模板 模板引擎
說明:模板文件就是按照一定的規(guī)則書寫的展示效果的HTML文件 模板引擎就是負(fù)責(zé)按照指定規(guī)則進行替換的工具
模板引擎選擇jinja2
一、渲染模板的方法
render_template()
render_templates_string()
實例
@app.route("/") def index(): #將模板內(nèi)容響應(yīng)給用戶 return render_template("index.html") #渲染一內(nèi)容響應(yīng)給用戶 return render_template_string("二、模板的語法原諒色
")
模板中只存在倆種語法
變量
{{ var }}
#像模板文件中傳參 return render_template("index.html",title="首惡") {{ title }}
標(biāo)簽
{% 標(biāo)簽名 %}
注意:
在模板中使用字典中的鍵 需要像使用對象得方式來調(diào)用 {{data.key}}
如果在模板中給定的變量不存在 則插入的是空字符串 不會報錯
三、過濾器過濾器使用管道符 | 來使用的
{{ var|abs }} 返回一個數(shù)值的絕對值
default 設(shè)置默認(rèn)值
只有當(dāng)給定的變量不存在時 則執(zhí)行默認(rèn)值
當(dāng)設(shè)置default的boolean的時候 會執(zhí)行默認(rèn)值
first: 取出變量中的第一個字符
last: 取出變量中的最后一個字符
format: 字符的格式化
length: 返回變量值的長度
join: 拼接成字符串
safe: 不轉(zhuǎn)義標(biāo)簽 原樣顯示
lower 轉(zhuǎn)為小寫
upper 轉(zhuǎn)為大寫
replace 替換
striptages 去除HTML標(biāo)簽
{{ data.html|striptags }}
四、標(biāo)簽實例
{% if data.bool %}
實例
{% for i in data.xxxx %} {# 錯誤的迭代方法TypeError: "bool" object is not iterable #} {# {% for i in data.bool %}#}
注意:
break continue 不能夠在這里使用
{% for k,v in data.items() %}
變量 | 描述 |
---|---|
loop.index | 獲取當(dāng)前迭代的索引 從1開始 |
loop.index0 | 獲取當(dāng)前迭代的索引 從0開始 |
loop.first | 是否為第一次迭代 |
loop.last | 是否為最后一次迭代 |
loop.length | 迭代的長度 |
{# 多行注釋 #}
七、文件包含 include相當(dāng)于把一個文件 拷貝到當(dāng)前的你的包含的位置
實例
{% include "common/header.html" %}我是中間的內(nèi)容{% include "common/footer.html" %}
注意:
包含的公共的文件中 只存放 公共的代碼 除此以外什么都不要存在
導(dǎo)入的時候 如果文件和在同一級別 直接導(dǎo)入就可以 如果包含在某個目錄中 需要寫出路徑
{% include "common/header.html" %} {% include "test.html" %}
?
八、宏 macro概念: 類似python中的函數(shù)
實例
在macro.html中
{% macro input(name,type="text",value="") %} {% endmacro %}
宏的調(diào)用
{{ input("text","username","") }} {{ input() }} {{ input(type="password",name="userpass") }}宏的導(dǎo)入 (1) import
{% import "test.html" as test %} {% import "common/test.html" as test %}(2) form import用戶名: {{ test.input(type="password",name="userpass") }}
{% from "test.html" import input %} {% from "common/test.html" import input %}用戶名: {{ input(type="password",name="userpass") }}
注意:
宏的調(diào)用只能在定義的下方去調(diào)用 否則未定義
宏如果存在形參 且沒有默認(rèn)值 則可以調(diào)用(沒意義)
形參的默認(rèn)值 需要遵循默認(rèn)值規(guī)則 有默認(rèn)值的參數(shù) 放右側(cè)
可以正常使用 關(guān)鍵字參數(shù)
九、繼承 extends{% extends %} 繼承某個模板
{% block %} 挖坑和填坑
{{ super() }} 調(diào)用被替換掉的代碼
{% block header %} {% block meta %} {% endblock %}{% block title%}首頁{% endblock %} {% block link %} {% endblock %} {% block script %} {% endblock %} {% endblock %}頭部 {% block con %} 我是中間的內(nèi)容部分 {% endblock %}
{% extends "common/base.html" %} {% block title %} 我的首頁 {% endblock %} {% block style %} {{ super() }} p{color:green;} {% endblock %} {% block con %}我是首頁的內(nèi)容
我是首頁的內(nèi)容 {% endblock %}
注意:
如果當(dāng)替換某個樣式的時候 所有原來的樣式 都消失了 去查看是否使用了super()
十、flask-bootstrap安裝
pip install flask-bootstrap
sudo pip3 install flask-bootstrap
使用
繼承 bootstrap/base.html 基礎(chǔ)模板 改造成適用于自己網(wǎng)站的base.html基礎(chǔ)模板
自己的base.html{% extends "bootstrap/base.html" %} {% block navbar %} {% endblock %} {% block content %}{% block pagecontent %} 網(wǎng)頁的中間內(nèi)容部分寫在當(dāng)前的位置 {% endblock %}{% endblock %}
使用 index.html
{% extends "common/base.html" %} {% block title %} 首頁 {% endblock %}十一、錯誤頁面的定制 manage.py
@app.errorhandler(404) def page_not_found(e): return render_template("common/error.html",error=e,code=404) @app.errorhandler(500) def server_error(e): return render_template("common/error.html",error=e,code=500)error.html
{% extends "common/base.html" %} {% block title %} {{ code }}錯誤 {% endblock %} {% block pagecontent %}十二、視圖傳遞多個參數(shù) (1) 原始傳參{{ error }}{% endblock %}
@app.route("/") def index(): return render_template("index.html",arg1=1,arg2=2...)(2) 使用字典
@app.route("/") def index(): return render_template("index.html",arg={arg1:1,arg2:2...}) kwarg={arg1:1,arg2:2...} return render_template("index.html",``)(3) 使用全局變量g
@app.route("/") def index(): g.name = "張三" g.age = 18 return render_template("index.html") 模板中(4) 使用 **locals()
- {{ g.name }}
- {{ g.age }}
@app.route("/") def index(): name = "張三" age = 18 print(locals()) return render_template("index.html",**locals()) 模板中
@app.route("/test/") def test(): print(url_for("index",_external=True)) return "test"十四、加載靜態(tài)資源
靜態(tài)資源:圖片,css,js,視頻,音頻,,
實例
flask入門3-表單
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41825.html
摘要:每天的內(nèi)容跑起來模板引擎表單文件上傳郵件發(fā)送一框架的簡介模型負(fù)責(zé)數(shù)據(jù)的操作視圖負(fù)責(zé)數(shù)據(jù)的展示控制器控制你的的操作以及視圖模板的渲染在中叫做模型負(fù)責(zé)數(shù)據(jù)的操作控制你的的操作以及視圖模板的渲染業(yè)務(wù)邏輯的操作模板負(fù)責(zé)數(shù)據(jù)的展示二架構(gòu)三概念是 flask 每天的內(nèi)容 flask跑起來 模板引擎 flask表單 文件上傳郵件發(fā)送 flask-sqlalchemy 一、web框架的簡介 M ...
摘要:示例如下靜態(tài)路由使用動態(tài)變量的路由未指定變量類型使用動態(tài)變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數(shù)參數(shù)傳入進來。 開始決定認(rèn)真的在網(wǎng)上寫一些東西,主要原因還是在于希望能提升學(xué)習(xí)效果。雖說python寫了有幾年,但是web后端框架的確沒怎么接觸過,買了本狗書寥寥草草的過了一遍,發(fā)現(xiàn)很多東西還是理解不深,真的是好記性不如爛筆頭,知識也要從基礎(chǔ)開始,退回來好好看看官方文檔,再...
摘要:我們的論壇項目就使用了該框架。此外,麥子學(xué)院也有一個入門視頻教程,一共小時的視頻教程,涵蓋開發(fā)的方方面面,包括環(huán)境的搭建,語法介紹,項目結(jié)構(gòu)的組織,全球化,單元測試等內(nèi)容。博客地址更多閱讀的機制三個框架的對比 前面兩篇文章中我們已經(jīng)了解 Web(HTTP)服務(wù)器,Web應(yīng)用程序,Web框架,WSGI這些 Python Web 開發(fā)中的概念。我們知道,Web框架通過將不同Web應(yīng)用程序中...
閱讀 2323·2021-11-24 09:39
閱讀 3056·2021-10-15 09:39
閱讀 3107·2021-07-26 23:38
閱讀 2303·2019-08-30 11:14
閱讀 3421·2019-08-29 16:39
閱讀 1724·2019-08-29 15:23
閱讀 792·2019-08-29 13:01
閱讀 2674·2019-08-29 12:29