这几天学的东西比较多,时间又有点不够用,趁着快吃饭了,赶紧总结总结。

00x1 宏:

  如果学过C语言的童鞋,可能知道宏在C语言里面是一个定义一个固定参数的变量。在flask里面,宏是相当于一个函数的作用。不是像C语言的一个变量,而是定义了一个函数。这个函数是html的函数,霍霍,html还能有函数?是的呀,之前我也布吉鸟。知道之后先是嗯嗯嗯····,然后想了想,好像没啥用啊,我还不如直接写一个循环多方便。。。其实是我懒了,不想学这个东西了。并且这个宏,在我们项目中,我翻了一下,用在哪个地方呢?就是导入文件不是有一个url_for('static', filename = 'xxx'),我们只是把filename给省略了,其他地方就再也见不到宏了·····

  刚才已经说过了,宏是一个函数,那我们先写一个简单的宏。

  

{% macro input(name = '', value = '' , type = 'text',class = 'class')  %}

<input type="{{ type }}" name = "{{ name }}" ,value = "{{ value }}" ,class = "{{ class }}">
{% endmacro %}

  其中先开始一个宏,然后再结束一个宏。并且想要引用这个宏的时候,只能是在宏的代码块中,其他地方再进行用的时候,就只能是再写一个了。

  详细解析
      宏里面定义了一个是input(),不是<input>。这个input(),里面定义的name和value····。然后下面的<input>标签相当于引用了,不过意义不大,这是我感觉的····

  具体的效果可以运行一遍看看(其实没啥效果)。

  宏的地方,还要知道宏是如何导入的

    这里引用的是一位(身高可能都比我高····)小姐姐的博客

  (1)import "宏文件的路径"as xxx(需要导入的宏的名字)
  (2)from “宏文件的路径” import 宏的名字 [as 宏的别名]([ ]中的可以不要)
  示例:

  

{% from "macro.html" import input as input_filed %}
<p>{{input_filed("username")}}</p>
<p>{{input_filed("password",type="password")}}</p>

  注意:(1)宏的路径不要以相对路径去寻找,要以’templates’作为绝对路径去寻找。
     (2)如果想要在导入宏的时候,就把当前模板的一些参数传入给宏所在的模板,那么就应该在导入的时候使用’with context’。
示例:from xxx.html import input with context

  

00x2 jinjia2语法:

  jinjia2是flask框架中一个特有的语法。jinjia2语法跟jsp里面的语法类似(我只会那么一丢丢jsp,木的办法,java比python难多了)。可以先看下flask手册里面的jinjia2,flask手册里面的还是比较简单的,如果是看jinjia2手册的话,估计一看就懵逼了。jinjia2是在前端里面用到的,如果想要在html中写入python代码的吧,就需要用到jinjia2。

  flask 手册地址:http://docs.jinkan.org/docs/flask/templating.html#jinja

jinjia2基础语法中:
  {% xxx %} 这样只有一个{}并且里面有一个%的,一般都是语句,比如for ,if extends....。这样的语句一般都是有始有终,都是成双入对的,除了extends,set,include.....

  {{}},这样两个括号放一块的地方,一般都是变量。比如{{ username }} ,username是变量。

if 判断 :
  比如我要判断一个username是否为'abcd',那么我应该是写。

  { % if username == 'avcd' %}

  {% #先开始,再结束啦# %}

  {% endif % }

for 循环:

  { % for循环 %}

  {% endfor %}

set:

  set是定义一个变量的。如果前端没有传入一个lights这个变量,但是我还想要用。这时候就需要 {% set lights = 'xx' %} 。这样的话这个lights变量就能够在前端里面就能用了,这个地方可以观察下我在豆瓣那篇博客中的具体运用。

include:
  include翻译过来是包括、包含的意思。如果说我们需要包含一个页面的话,就可以用一个{% include '要包含的html'%}。include用的不多,并且在include中可能会发生样式冲突(这个在有css的时候更明显),其实是包括的内容里面有重复的,html的解释器不知道该解释哪一个了,所以就会有冲突。

extends:

  继承,这个在前端里面用到的相当多,可谓是一个重点的语法,但是用着是炒鸡简单的。比如我先写一个base.html,再新建一个Html,把html中里面的东西都给删了,直接一个{% extends 'base.html' %} ,这样就会把base.html里面的东西都拿过来了。需要注意的是,继承要写在第一行,不能随便乱写的。

block:

   模块,block是和extends(继承)配合着用的,比如我要继承的里面,不想全部都是一个页面,这个时候我们可以用一个block,这个地方比较容易哦,{% block 命名 % } {% endblock %}。这样block代码块中的东西就不会是base.html中的了。

附加:

  因为jinjia2的基础语法,比较容易,所以我没有是贴上演示代码和演示效果。想百尺竿头更进一步的,可以看看我写的那个微信小demo

  

总结下flask中的宏、Jinjia2语法的更多相关文章

  1. flask中的宏

    对于flask中的宏编程.我们使用 macro 来对宏起个名称 宏编程 对于我们来说是减少了代码的重用.以及简化了标签的操作,对与开发效率有很大的提升, 在html中.相信大多数都用到了.input ...

  2. 简单介绍下python中函数的基础语法

    python 函数 定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 特性 减少代码重复 使程序变得可扩展 使程序变得易于维护 函数的创建 pyt ...

  3. flask中jinjia2模板使用详解2

    接上文 注释的使用 在jinjia2模板中,使用{# #}进行代码注释,如下所示 运行后发现,注释不会被render出来 去掉空行 两种方法可以去掉jinjia2模板中的空白行,一是设置jinjia2 ...

  4. Flask中的模板语法jinjia2

    Flask中默认的模板语言是Jinja2 I. Jinja2模板语言中的 for {% for foo in g %} {% endfor %} II. Jinja2模板语言中的 if {% if g ...

  5. 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session

    一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...

  6. flask 中的模板语法 jinja2及render_template的深度用法

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  7. day94:flask:Jinjia2模板引擎&flask中的CSRF攻击&Flask-SQLAlchemy的创建模型类和基本的增删改查

    目录 1.Jinjia2模板引擎 1.Jinjia2加载模板并传递数据到模板中 2.Jinjia2的模板语句 3.模板中特有的变量和函数 4.模板中内置的过滤器 5.自定义过滤器 6.模板继承 2.在 ...

  8. Python框架学习之Flask中的Jinja2模板

    前面也提到过在Flask中最核心的两个组件是Werkzeug和Jinja2模板.其中Werkzeug在前一节已经详细说明了.现在这一节主要是来谈谈Jinja2模板. 一.为什么需要引入模板: 在进行软 ...

  9. flask中的return、过滤器详解

    之前吧一直学习flask的时候,一直不明白response是怎么产生,今天是明白了.retrun  哎呀,这个地方看着挺小心的东西, 蕴含的能量可不小啊.今天我详细总结总结. 先来写jinjia2语法 ...

随机推荐

  1. js数组方法(管饱)

    有一些数组方法是ECMAScript新增的,一定要注意浏览器的兼容!! Array对象属性: 属性 说明 constructor 返回对创建此对象的函数引用 length 返回集合内的元素的所有长度 ...

  2. 5. Spark调优

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第五部分是讲的是Spark调优相关的知识点. 一.并行度调优 二.序列化格式优化 三.内存管理优化 四.Spark SQL性能 ...

  3. 极客mysql02

    mysql 一条更新语句的执行过程: 1.首先客户端通过tcp/ip发送一条sql语句到server层的SQL interface 2.SQL interface接到该请求后,先对该条语句进行解析,验 ...

  4. const常量与define宏定义的区别(转)

    #define RADIUS 100; const  float   RADIUS = 100; (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. ( ...

  5. php大文件上传失败的解决方法

    1.打开php.ini 2.查找post_max_size:(修改上传大小限制) 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的默认为8m,设置为自己需要的值, ...

  6. matlab 向量操作作业

    写出下列语句的计算结果及作用 clear    清除所有变量 clc    清屏 A = [2 5 7 1 3 4];    创建行向量并赋值 odds = 1:2:length(A);    冒号操 ...

  7. [原题复现][2020i春秋抗疫赛] WEB blanklist(SQL堆叠注入、handler绕过)

    简介 今天参加i春秋新春抗疫赛 一道web没整出来 啊啊啊 好垃圾啊啊啊啊啊啊啊  晚上看群里赵师傅的buuoj平台太屌了分分钟上线 然后赵师傅还分享了思路用handler语句绕过select过滤.. ...

  8. 学好Flex布局并不容易

    1. Flex布局介绍 CSS的传统布局解决方案,基于盒状模型,依赖display属性.position属性.float属性,对于一些特殊的布局,例如垂直居中,往往要想很多hack的方法来解决. 20 ...

  9. 吉他入门:攻克solo第七课(Randy Rhoads风格)

    本期文章,主要和大家分享一下Randy Rhoads的solo句子.相信很多精研电吉他的朋友都会听过这个一手把Ozzy Osbourne从离开黑色安息日乐队的深渊中捞出来的天才吉他手.如果你暂时不了解 ...

  10. 推荐一款比迅雷下载速度快的mac下载器

    Folx和迅雷是2款支持在Mac系统上进行文件资源下载的工具,两者都支持BT种子资源的下载和直链下载,但Folx还另外支持了下载计划的自定义和智能限速功能.本文主要是为了比较Folx和迅雷在下载同一资 ...