flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含
宏的概念
類似于python中的函數,宏的作用就是在模板中重復利用代碼,避免代碼冗余。
Jinja2支持宏,還可以導入宏,需要在多處重復使用的模板代碼片段可以寫入單獨的文件,再包含在所有模板中,以避免重復。
簡單定義宏的方法以及調用
1.定義一個 input()的宏
{% macro input() %}
{% endmacro %}
2.在模板中調用input()宏
{{ input() }}
這樣的宏沒有參數的傳入,下面再來看看如何設置帶參數的宏。
定義帶參數的宏以及調用
1.定義帶參數的宏
{% macro input(name,value='',type='text',size=20) %}
{% endmacro %}
2.調用宏,并傳遞參數
{{ input(value='name',type='password',size=40)}}
編寫上面兩個宏的完整示例
1.編寫macro_ex.html模板文件
Title無參數的宏
{% macro input1() %}
{% endmacro %}
{{ input1() }}
設置帶參數的宏
{% macro input2(name,value='',type='text',size=20) %}
{% endmacro %}
{{ input2(value='name',type='password',size=40) }}
2.編寫一個視圖函數
from flask import Flask, render_template
app = Flask(__name__)
app.config["SECRET_KEY"] = "xhosd6f982yfhowefy29f"
@app.route("/macro_ex", methods=["GET", "POST"])
def macro_ex():
return render_template("macro_ex.html")
if __name__ == '__main__':
app.run(debug=True)
3.訪問視圖查看效果訪問 http://127.0.0.1:5000/macro_ex
可以看到只需要調用模板的宏就可以直接創建一個input,如果宏的html比較復雜,那么就可以更加方便,減少html的編寫。
下面還有更加方便的做法。
在python中的公共類方法可以寫到一個公共工具類中,后續方便其他地方調用。而模板宏也可以有同樣的做法。
可以將模板宏都寫到一個html文件中,然后通過模板繼承的方式提供調用,下面來看看怎么操作。
把宏單獨抽取出來,封裝成html文件,其它模板中導入使用
創建文件名可以自定義macro.html
{% macro login_form() %}
{% endmacro %}
在其它模板文件中先導入,再調用
{% import 'macro.html' as macro_import %}
{{ macro_import.login_form() }}
完整示例如下:1.創建macro.html文件
2.編寫另一個html文件macro_ex.html,用來導入模板宏以及調用
可以看到有了宏的使用,已經很方便避免重復編寫的html內容。下面再來介紹Django模板也有的繼承功能。
模板繼承
模板繼承是為了重用模板中的公共內容。一般Web開發中,繼承主要使用在網站的頂部菜單、底部。這些內容可以定義在父模板中,子模板直接繼承,而不需要重復書寫。
{% block top %}{% endblock %}標簽定義的內容,相當于在父模板中挖個坑,當子模板繼承父模板時,可以進行填充。
子模板使用extends指令聲明這個模板繼承自哪?父模板中定義的塊在子模板中被重新定義,在子模板中調用父模板的內容可以使用super()。
父模板:base.html
{% block top %}
頂部菜單
{% endblock top %}
{% block content %}
{% endblock content %}
{% block bottom %}
底部
{% endblock bottom %}
子模板:children.html
{% extends 'base.html' %}
{% block content %}
需要填充的內容
{% endblock content %}
模板繼承使用時注意點:
不支持多繼承。
為了便于閱讀,在子模板中使用extends時,盡量寫在模板的第一行。
不能在一個模板文件中定義多個相同名字的block標簽。
當在頁面中使用多個block標簽時,建議給結束標簽起個名字,當多個block嵌套時,閱讀性更好。
包含(Include)
Jinja2模板中,除了宏和繼承,還支持一種代碼重用的功能,叫包含(Include)。它的功能是將另一個模板整個加載到當前模板中,并直接渲染。
include的使用示例:
{% include 'index.html' %}
{% include 'index.html' %}
包含在使用時,如果包含的模板文件不存在時,程序會拋出TemplateNotFound異常,可以加上ignore missing關鍵字。如果包含的模板文件不存在,會忽略這條include語句。
注意:include可以多次使用,也就是可以多次加載模板內容到當前模板中。
include的使用加上關鍵字ignore missing
設置include一個不存在的模板,如下:
{% include 'hello.html' %}
上面說到,如果包含的模板文件不存在,則會拋出異常TemplateNotFound,如下:
如果想要避免報錯,可以增加關鍵字ignore missing,如下:
{% include 'hello.html' ignore missing%}
再次訪問頁面則不會報錯了,直接顯示空白而已,如下:
總結:宏、繼承、包含
宏(Macro)、繼承(Block)、包含(include)均能實現代碼的復用。
繼承(Block)的本質是代碼替換,一般用來實現多個頁面中重復不變的區域。
宏(Macro)的功能類似函數,可以傳入參數,需要定義、調用。
包含(include)是直接將目標模板文件整個渲染出來。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样使用微脉预约挂号
- 下一篇: mysql卸载时弹框,win10卸载my