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 將list轉(zhuǎn)成字符串,中間用符號(hào)分隔的方法
今天小編就為大家分享一篇python 將list轉(zhuǎn)成字符串,中間用符號(hào)分隔的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
python itchat實(shí)現(xiàn)調(diào)用微信接口的第三方模塊方法
這篇文章主要介紹了python itchat實(shí)現(xiàn)調(diào)用微信接口的第三方模塊方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
python實(shí)現(xiàn)線(xiàn)程池的方法
這篇文章主要介紹了python實(shí)現(xiàn)線(xiàn)程池的方法,實(shí)例分析了Python線(xiàn)程池的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06
python通用讀取vcf文件的類(lèi)(復(fù)制粘貼即可用)
這篇文章主要介紹了python通用讀取vcf文件的類(lèi)(可以直接復(fù)制粘貼使用) ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Python實(shí)現(xiàn)掃描指定目錄下的子目錄及文件的方法
這篇文章主要介紹了Python實(shí)現(xiàn)掃描指定目錄下的子目錄及文件的方法,需要的朋友可以參考下2014-07-07

