flask結(jié)合jinja2使用詳解
jinja2簡(jiǎn)介
特征
- 沙箱中執(zhí)行
- 強(qiáng)大的 HTML 自動(dòng)轉(zhuǎn)義系統(tǒng)保護(hù)系統(tǒng)免受 XSS
- 模板繼承
- 及時(shí)編譯最優(yōu)的 python 代碼
- 可選提前編譯模板的時(shí)間
- 易于調(diào)試。異常的行數(shù)直接指向模板中的對(duì)應(yīng)行。
- 可配置的語(yǔ)法
Jinja 分隔符
Jinja 在模板字符串中使用各種分隔符。
{% %}
-陳述{{ }}
-要打印到模板輸出的表達(dá)式{# #}
-模板輸出中未包含的注釋# ##
-行語(yǔ)句
模板渲染
app.py
from flask import Flask,render_template,request app = Flask(__name__) @app.route('/') def hello_world(): return render_template('index.html') @app.route('/blog/<int:blog_id>') def blog(blog_id): page = request.args.get('page', default=1, type=int) return render_template('blog.html',id=blog_id,page=page) if __name__ == '__main__': app.run()
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>coleak's page</title> </head> <body> <h1>START</h1> <h2>coleak2</h2> <h3>coleak3</h3> <h4>coleak4</h4> <h5>coleak5</h5> <h1>END</h1> </body> </html>
blog.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>這里是第{{ id }}位博客主的第{{ page }}頁(yè)博客</h1> </body> </html>
效果測(cè)試
http://10.133.5.113:8000
http://10.133.5.113:8000/blog/3
http://10.133.5.113:8000/blog/3?page=6
模板訪(fǎng)問(wèn)變量屬性
app.py
from flask import Flask,render_template,request app = Flask(__name__) class user: def __init__(self,username,email): self.username=username self.email=email @app.route('/') def hello_world(): User=user('coleak','123@163.com') person={ "username":"coleak", "email":"123@666.com" } return render_template('index.html',user=User,person=person) @app.route('/blog/<int:blog_id>') def blog(blog_id): page = request.args.get('page', default=1, type=int) return render_template('blog.html',id=blog_id,page=page) if __name__ == '__main__': app.run()
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>coleak's page</title> </head> <body> <h1>START</h1> <div><h1>welcome {{ user.username }}</h1></div> <div><h1>你的別名是{{ person.username }},郵箱是{{ person["email"] }}</h1></div> <h2>coleak2</h2> <h3>coleak3</h3> <h4>coleak4</h4> <h5>coleak5</h5> <h1>END</h1> </body> </html>
效果測(cè)試
內(nèi)置過(guò)濾器的使用
可以將過(guò)濾器應(yīng)用于數(shù)據(jù)以對(duì)其進(jìn)行修改。 例如,sum 篩選器可以對(duì)數(shù)據(jù)求和,escape 篩選器對(duì)它們進(jìn)行轉(zhuǎn)義,sort 篩選器對(duì)它們進(jìn)行排序。
app.py
from flask import Flask,render_template,request app = Flask(__name__) class user: def __init__(self,username,email): self.username=username self.email=email @app.route('/') def hello_world(): User=user('coleak','123@163.com') person={ "username":"coleak", "email":"123@666.com" } return render_template('index.html',user=User,person=person) @app.route('/filter') def filter(): User1=user('coleak',-123.456) return render_template("filter.html",user=User1) if __name__ == '__main__': app.run()
filter.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>過(guò)濾器</title> </head> <body> <div>{{ user.username }}長(zhǎng)度為{{ user.username|length }}</div> <div>{{ user.email }}絕對(duì)值為{{ user.email|abs }}</div> </body> </html>
效果測(cè)試
自定義過(guò)濾器
app.py
from flask import Flask,render_template,request from datetime import datetime app = Flask(__name__) def my_filter(value,format="%Y年-%m月-%d日 %H時(shí):%M分"): return value.strftime(format) class user: def __init__(self,username,email): self.username=username self.email=email app.add_template_filter(my_filter,"time_filter") @app.route('/') def hello_world(): User=user('coleak','123@163.com') person={ "username":"coleak", "email":"123@666.com" } return render_template('index.html',user=User,person=person) @app.route('/filter') def filter(): mytime=datetime.now() User1=user('coleak',-123.456) return render_template("filter.html",user=User1,mytime=mytime) if __name__ == '__main__': app.run()
filter.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>過(guò)濾器</title> </head> <body> <div>{{ mytime }}過(guò)濾后為{{ mytime|time_filter }}</div> </body> </html>
效果測(cè)試
控制語(yǔ)句
app.py
from flask import Flask,render_template,request from datetime import datetime app = Flask(__name__) class user: def __init__(self,username,email): self.username=username self.email=email @app.route('/') def hello_world(): User=user('coleak','123@163.com') person={ "username":"coleak", "email":"123@666.com" } return render_template('index.html',user=User,person=person) @app.route('/control') def control(): age=request.args.get('age') age=int (age) books=[{"name":"boo1",'price':12},{"name":"boo2",'price':18},{"name":"book3",'price':21}] return render_template('control.html',age=age,books=books) if __name__ == '__main__': app.run()
control.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>控制語(yǔ)句</title> </head> <body> <div> {% if age>18 %} <h2>可以進(jìn)入網(wǎng)吧</h2> {% elif age==18 %} <h2>家長(zhǎng)陪同下進(jìn)入網(wǎng)吧</h2> {% else %} <h2>不可以進(jìn)入網(wǎng)吧</h2> {% endif %} </div> <div> {% for book in books %} <p>名稱(chēng):{{ book.name }}</p> <p>價(jià)格:{{ book.price }}</p> {% endfor %} </div> </body> </html>
效果測(cè)試
模板繼承
模板繼承是一項(xiàng)強(qiáng)大的功能,可減少代碼重復(fù)并改善代碼組織。 我們定義了一個(gè)基本模板,其他模板文件也從中繼承。 這些模板文件將覆蓋基本模板文件的特定塊。
app.py
from flask import Flask,render_template,request from datetime import datetime app = Flask(__name__) class user: def __init__(self,username,email): self.username=username self.email=email @app.route('/') def hello_world(): User=user('coleak','123@163.com') person={ "username":"coleak", "email":"123@666.com" } return render_template('index.html',user=User,person=person) @app.route('/base') def base(): return render_template("base.html") @app.route('/ch1') def ch1(): return render_template("ch1.html") @app.route('/ch2') def ch2(): return render_template("ch2.html") if __name__ == '__main__': app.run()
base.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}</title> </head> <body> {% block body %} {% endblock %} </body> </html>
ch1.html
{% extends "base.html" %} {% block title %} ch1的標(biāo)題 {% endblock %} {% block body %} <div>ch1的body</div> {% endblock %}
ch1.html
{% extends "base.html" %} {% block title %} ch2的標(biāo)題 {% endblock %} {% block body %} <div>ch2的body</div> {% endblock %}
加載靜態(tài)文件
結(jié)構(gòu)框架
add.py
from flask import Flask,render_template,request from datetime import datetime app = Flask(__name__) class user: def __init__(self,username,email): self.username=username self.email=email @app.route('/') def hello_world(): User=user('coleak','123@163.com') person={ "username":"coleak", "email":"123@666.com" } return render_template('index.html',user=User,person=person) @app.route('/static') def static_use(): return render_template("static.html") if __name__ == '__main__': app.run()
static.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>static</title> <link rel="stylesheet" href="{{ url_for('static',filename=" rel="external nofollow" css/style.css") }}"> <script src="{{ url_for('static',filename="js/myjs.js") }}"></script> </head> <body> <img src="{{ url_for('static',filename="images/flask.jpg") }}"></img> </body> </html>
myjs.js
alert('coleak');
style.css
body{ background-color: pink; }
flask.jpg
效果測(cè)試
到此這篇關(guān)于flask結(jié)合jinja2使用詳解的文章就介紹到這了,更多相關(guān)flask jinja2使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用20行代碼實(shí)現(xiàn)微信聊天機(jī)器人
這篇文章主要介紹了Python使用20行代碼實(shí)現(xiàn)微信聊天機(jī)器人,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Numpy數(shù)組的轉(zhuǎn)置和軸交換的實(shí)現(xiàn)
本文主要介紹了Numpy數(shù)組的轉(zhuǎn)置和軸交換的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Python?正則表達(dá)式基礎(chǔ)知識(shí)點(diǎn)及實(shí)例
在本篇文章里小編給大家整理了關(guān)于Python正則表達(dá)式的一些基礎(chǔ)知識(shí)點(diǎn)以及相關(guān)用法實(shí)例內(nèi)容,需要的朋友們可以參考下。2021-12-12Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例
這篇文章主要介紹了Python面向?qū)ο竽Хǚ椒ê蛦卫K代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03在Django中動(dòng)態(tài)地過(guò)濾查詢(xún)集的實(shí)現(xiàn)
本文主要介紹了Django中動(dòng)態(tài)地過(guò)濾查詢(xún)集的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03CPython 垃圾收集器檢測(cè)循環(huán)引用詳解
這篇文章主要為大家介紹了CPython 垃圾收集器檢測(cè)循環(huán)引用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Python大數(shù)據(jù)之使用lxml庫(kù)解析html網(wǎng)頁(yè)文件示例
這篇文章主要介紹了Python大數(shù)據(jù)之使用lxml庫(kù)解析html網(wǎng)頁(yè)文件,結(jié)合實(shí)例形式分析了Python大數(shù)據(jù)操作中使用lxml庫(kù)解析html網(wǎng)頁(yè)具體步驟及相關(guān)注意事項(xiàng),需要的朋友可以參考下2019-11-11Django權(quán)限系統(tǒng)auth模塊用法解讀
這篇文章主要介紹了Django權(quán)限系統(tǒng)auth模塊用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05