12_关于flask中的宏

Posted nichengshishaonian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12_关于flask中的宏相关的知识,希望对你有一定的参考价值。

关于Flask中的 宏

类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。
Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。

宏的定义和使用

  1. 不带参数宏的定义和使用
<!-- 定义, 相当于定义一个函数一样 -->
% macro input() %
    <input type="text" name='username' value=''>
% endmacro %

<!-- 使用, 相当于调用一个函数一样 -->
 input() 
  1. 带参数宏的定义和使用 (与函数是一样的,可以有必须参数和默认参数)
<!-- 定义 -->
% macro input2(name, value='', type='text', size=30) %
    <input type=" type " name=" name " value=" value " size=" size ">
% endmacro %

<!-- 使用 -->
 input2()    <!--name不指定, 则name="", 即也是空-->
<!-- 或者 -->
 input2('username') 
<!-- 或者 -->
 input2('username', value='cheng', type='password', size=50) 

导入宏和使用导入的宏 (import)

在真实的开发中,会将一些常用的宏单独放在一个文件中,在需要使用的时候,再从这个文件中进行导入。 import语句的语法跟pythonimport类似,可以直接import ... as ..., 也可以from ... import ...或者from ... import ... as ...

  1. import ‘宏文件的路径‘ as xxx [with context] # with context 导入的时候,把当前模板文件中的所有上下文变量也传递到宏文件中,这样宏文件就可以使用这些变量了

  2. from ‘宏文件的路径‘ import 宏的名字 [as xxx]

  3. 如果想要在导入宏的时候,就把当前模板中一些上下文变量传给宏所在的模板,那么就应该在导入宏的时候使用with contex. 如:

    import 'macro.html' as func with context
    form 'macor.html' import input with context

    注意: 宏文件路径,不要以相对路径去寻找,都要以templates作为绝对路径去寻找

假设有一个macro.html的模板文件,在里面定义的宏如下:

<!-- macro.html -->
% macro input(name, value='', type='text') %
<input type=" type " value="value" name="name">
% endmacro %

导入macro.html中的宏和使用其宏

<!-- index.html -->
<!-- 1 -->
% import 'macro.html' as func %
 func.input('username') 


<!-- 2 -->
% from 'macro.html' import input %
 input('username') 

<!-- 3 -->
% from 'macro.html' import input as inp %
 inp('username') 

以上是关于12_关于flask中的宏的主要内容,如果未能解决你的问题,请参考以下文章

关于Flask 邮件发送,支持多人发送

关于flask_restful的异常处理

关于flask中static_folder 和 static_url_path参数理解

关于flask中static_folder 和 static_url_path参数理解

[转] 关于VS中区分debug与release,32位与64位编译的宏定义

__VA_ARGS__和va_start作用, 关于log