对宏(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>

最新文章

  1. Java入门记(五):容器关系的梳理(下)——Map
  2. 解决mysqldump: Got error: 1044: Access denied for user
  3. [Ember] Ember.js Templates
  4. 斗地主你什么时候才会托管?(.NET中的托管于非托管)
  5. 2015第9周三html5学习0
  6. Hive HA使用说明
  7. JAVA设计模式(09):结构化-代理模式(Proxy)
  8. javascript selenium全套教程发布
  9. python之re正则简单够用
  10. python之路—博客目录
  11. 提取和匹配线特征的一个demo
  12. Python_关于多线程下变量赋值取值的一点研究
  13. HTC Vive 基础入门 基于Unity3D引擎
  14. nginx_server_location对客户资源的辨别规则
  15. 学习笔记4-pathon的range()函数和list()函数
  16. 选择提供器 - 选择监听器(selection provider-selection listener)模式
  17. WIFI_仿手机写wifi应用程序_WDS
  18. roadhog中如何拷贝文件
  19. 【Android】12.4 利用Intent读取图库中的图片
  20. Linux安装配置Nginx

热门文章

  1. http的报文结构和状态码总结
  2. day1 -- Python变量、注释、格式化输出字符串、input、if、while、for
  3. OSI七层协议&amp;TCP协议(三次握手四次挥手)
  4. CreateEvent进程同步
  5. c++ Message与Folder 拷贝 析构(没有动态空间的类)
  6. GAN实战笔记——第四章深度卷积生成对抗网络(DCGAN)
  7. 基于 Kafka 的实时数仓在搜索的实践应用
  8. WEB服务蜜罐部署实验
  9. [MethodImpl(MethodImplOptions.Synchronized)]与lock机制
  10. 【C#IO 操作】stream 字节流|字符流 |比特流