日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask模板02

發(fā)布時間:2023/12/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask模板02 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

3.4 控制語句

常用的幾種控制語句:

模板中的if控制語句

@app.route('/user') def user():user = 'dongGe'return render_template('user.html',user=user) <html><head>{% if user %}<title> hello {{user}} </title>{% else %}<title> welcome to flask </title> {% endif %}</head><body><h1>hello world</h1></body></html>

模板中的for循環(huán)語句

@app.route('/loop')def loop():fruit = ['apple','orange','pear','grape']return render_template('loop.html',fruit=fruit) <html><head>{% if user %}<title> hello {{user}} </title>{% else %}<title> welcome to flask </title> {% endif %}</head><body><h1>hello world</h1><ul>{% for index in fruit %}<li>{{ index }}</li>{% endfor %}</ul></body></html>

?

3.5 宏、繼承、包含

類似于python中的函數(shù),宏的作用就是在模板中重復利用代碼,避免代碼冗余。

Jinja2支持宏,還可以導入宏,需要在多處重復使用的模板代碼片段可以寫入單獨的文件,再包含在所有模板中,以避免重復。

定義宏

{% macro input() %}<input type="text"name="username"value=""size="30"/> {% endmacro %}

調(diào)用宏

{{ input() }}

定義帶參數(shù)的宏

{% macro input(name,value='',type='text',size=20) %}<input type="{{ type }}"name="{{ name }}"value="{{ value }}"size="{{ size }}"/> {% endmacro %}

調(diào)用宏,并傳遞參數(shù)

{{ input(value='name',type='password',size=40)}}

把宏單獨抽取出來,封裝成html文件,其它模板中導入使用

文件名可以自定義macro.html

{% macro function() %}<input type="text" name="username" placeholde="Username"><input type="password" name="password" placeholde="Password"><input type="submit"> {% endmacro %}

在其它模板文件中先導入,再調(diào)用

{% import 'macro.html' as func %} {% func.function() %}

模板繼承:

模板繼承是為了重用模板中的公共內(nèi)容。一般Web開發(fā)中,繼承主要使用在網(wǎng)站的頂部菜單、底部。這些內(nèi)容可以定義在父模板中,子模板直接繼承,而不需要重復書寫。

{% block top %}``{% endblock %}標簽定義的內(nèi)容,相當于在父模板中挖個坑,當子模板繼承父模板時,可以進行填充。

子模板使用extends指令聲明這個模板繼承自哪?父模板中定義的塊在子模板中被重新定義,在子模板中調(diào)用父模板的內(nèi)容可以使用super()。

父模板:base.html

{% block top %}頂部菜單{% endblock top %}{% block content %}{% endblock content %}{% block bottom %}底部{% endblock bottom %}

子模板:

{% extends 'base.html' %}{% block content %}需要填充的內(nèi)容{% endblock content %}
  • 模板繼承使用時注意點:
    • 不支持多繼承。
    • 為了便于閱讀,在子模板中使用extends時,盡量寫在模板的第一行。
    • 不能在一個模板文件中定義多個相同名字的block標簽。
    • 當在頁面中使用多個block標簽時,建議給結(jié)束標簽起個名字,當多個block嵌套時,閱讀性更好。

包含(Include)

Jinja2模板中,除了宏和繼承,還支持一種代碼重用的功能,叫包含(Include)。它的功能是將另一個模板整個加載到當前模板中,并直接渲染。

示例:

include的使用

{\% include 'hello.html' %}

包含在使用時,如果包含的模板文件不存在時,程序會拋出TemplateNotFound異常,可以加上ignore missing關鍵字。如果包含的模板文件不存在,會忽略這條include語句。

示例:

include的使用加上關鍵字ignore missing

{\% include 'hello.html' ignore missing %}

  • 宏、繼承、包含:
    • 宏(Macro)、繼承(Block)、包含(include)均能實現(xiàn)代碼的復用。
    • 繼承(Block)的本質(zhì)是代碼替換,一般用來實現(xiàn)多個頁面中重復不變的區(qū)域。
    • 宏(Macro)的功能類似函數(shù),可以傳入?yún)?shù),需要定義、調(diào)用。
    • 包含(include)是直接將目標模板文件整個渲染出來。

3.6 Flask中的特殊變量和方法:

在Flask中,有一些特殊的變量和方法是可以在模板文件中直接訪問的。

config 對象:

config 對象就是Flask的config對象,也就是 app.config 對象。{{ config.SQLALCHEMY_DATABASE_URI }}

request 對象:

就是 Flask 中表示當前請求的 request 對象,request對象中保存了一次HTTP請求的一切信息。

request常用的屬性如下:

屬性說明類型
data記錄請求的數(shù)據(jù),并轉(zhuǎn)換為字符串*
form記錄請求中的表單數(shù)據(jù)MultiDict
args記錄請求中的查詢參數(shù)MultiDict
cookies記錄請求中的cookie信息Dict
headers記錄請求中的報文頭EnvironHeaders
method記錄請求使用的HTTP方法GET/POST
url記錄請求的URL地址string
files記錄請求上傳的文件*
{{ request.url }}

url_for 方法:

url_for() 會返回傳入的路由函數(shù)對應的URL,所謂路由函數(shù)就是被 app.route() 路由裝飾器裝飾的函數(shù)。如果我們定義的路由函數(shù)是帶有參數(shù)的,則可以將這些參數(shù)作為命名參數(shù)傳入。

{{ url_for('index') }}{{ url_for('post', post_id=1024) }}

get_flashed_messages方法:

返回之前在Flask中通過 flash() 傳入的信息列表。把字符串對象表示的消息加入到一個消息隊列中,然后通過調(diào)用 get_flashed_messages() 方法取出。

{% for message in get_flashed_messages() %}{{ message }} {% endfor %}

總結(jié)

以上是生活随笔為你收集整理的Flask模板02的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。