模板代码复用
在模板中,可能会遇到以下情况:
- 多个模板具有完全相同的顶部和底部内容
- 多个模板中具有相同的模板代码内容,但是内容中部分值不一样
- 多个模板中具有完全相同的 html 代码块内容
像遇到这种情况,可以使用 JinJa2 模板中的 宏、继承、包含来进行实现
宏
对宏(macro)的理解:
- 把它看作 Jinja2 中的一个函数,它会返回一个模板或者 HTML 字符串
- 为了避免反复地编写同样的模板代码,出现代码冗余,可以把他们写成函数以进行重用
- 需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复
使用
| {% macro input(name,value='',type='text') %} |
| <input type="{{type}}" name="{{name}}" |
| value="{{value}}" class="form-control"> |
| {% endmacro %} |
| {{ input('name' value='zs')}} |
| <input type="text" name="name" |
| value="zs" class="form-control"> |
- 把宏单独抽取出来,封装成html文件,其它模板中导入使用,文件名可以自定义macro.html
| {% macro function(type='text', name='', value='') %} |
| <input type="{{type}}" name="{{name}}" |
| value="{{value}}" class="form-control"> |
| |
| {% endmacro %} |
| {% import 'macro.html' as func %} |
| {% func.function() %} |
代码演练
| <form> |
| <label>用户名:</label><input type="text" name="username"><br/> |
| <label>身份证号:</label><input type="text" name="idcard"><br/> |
| <label>密码:</label><input type="password" name="password"><br/> |
| <label>确认密码:</label><input type="password" name="password2"><br/> |
| <input type="submit" value="注册"> |
| </form> |
| {#定义宏,相当于定义一个函数,在使用的时候直接调用该宏,传入不同的参数就可以了#} |
| {% macro input(label="", type="text", name="", value="") %} |
| <label>{{ label }}</label><input type="{{ type }}" name="{{ name }}" value="{{ value }}"> |
| {% endmacro %} |
| <form> |
| {{ input("用户名:", name="username") }}<br/> |
| {{ input("身份证号:", name="idcard") }}<br/> |
| {{ input("密码:", type="password", name="password") }}<br/> |
| {{ input("确认密码:", type="password", name="password2") }}<br/> |
| {{ input(type="submit", value="注册") }} |
| </form> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?