总结下flask中的宏、Jinjia2语法
这几天学的东西比较多,时间又有点不够用,趁着快吃饭了,赶紧总结总结。
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语法的更多相关文章
- flask中的宏
对于flask中的宏编程.我们使用 macro 来对宏起个名称 宏编程 对于我们来说是减少了代码的重用.以及简化了标签的操作,对与开发效率有很大的提升, 在html中.相信大多数都用到了.input ...
- 简单介绍下python中函数的基础语法
python 函数 定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 特性 减少代码重复 使程序变得可扩展 使程序变得易于维护 函数的创建 pyt ...
- flask中jinjia2模板使用详解2
接上文 注释的使用 在jinjia2模板中,使用{# #}进行代码注释,如下所示 运行后发现,注释不会被render出来 去掉空行 两种方法可以去掉jinjia2模板中的空白行,一是设置jinjia2 ...
- Flask中的模板语法jinjia2
Flask中默认的模板语言是Jinja2 I. Jinja2模板语言中的 for {% for foo in g %} {% endfor %} II. Jinja2模板语言中的 if {% if g ...
- 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session
一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...
- flask 中的模板语法 jinja2及render_template的深度用法
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
- day94:flask:Jinjia2模板引擎&flask中的CSRF攻击&Flask-SQLAlchemy的创建模型类和基本的增删改查
目录 1.Jinjia2模板引擎 1.Jinjia2加载模板并传递数据到模板中 2.Jinjia2的模板语句 3.模板中特有的变量和函数 4.模板中内置的过滤器 5.自定义过滤器 6.模板继承 2.在 ...
- Python框架学习之Flask中的Jinja2模板
前面也提到过在Flask中最核心的两个组件是Werkzeug和Jinja2模板.其中Werkzeug在前一节已经详细说明了.现在这一节主要是来谈谈Jinja2模板. 一.为什么需要引入模板: 在进行软 ...
- flask中的return、过滤器详解
之前吧一直学习flask的时候,一直不明白response是怎么产生,今天是明白了.retrun 哎呀,这个地方看着挺小心的东西, 蕴含的能量可不小啊.今天我详细总结总结. 先来写jinjia2语法 ...
随机推荐
- Module Federation原理剖析
[转自团队掘金原文: https://juejin.im/post/6895324456668495880] 为什么需要学习webpack5 module Federation原理呢?因为EMP微前端 ...
- [MIT6.006] 19. Daynamic Programming I: Fibonacci, Shortest Path 动态规划I:斐波那契,最短路径
这节课讲动态规划的内容,动态规划是一种通用且有效的算法设计思路,它的主要成分是"子问题"+"重用".它可以用于斐波那契和最短路径等问题的求解上. 一.斐波那契 ...
- Why use MSIX message signal interrupt
处理一个低版本内核中断向量表不够问题:__assign_irq_vector 关联irq 和 vector失败问题: (bug还没解决先记录一下吧) 同时先学习一下MSI-X:MSI, message ...
- linux 异步I/O 信号
if (ioctl(ngx_processes[s].channel[0], FIOASYNC, &on) == -1) { ngx_log_error(NGX_LOG_ALERT, cycl ...
- python之 《zip,lambda, map》
1.zip 对于zip我们一般都是用在矩阵上 eg: a = [1,2,3] b = ['a', 'b', 'c'] x = zip(a, b) print(x) print(list(x)) 结果是 ...
- Linear basis
Linear basis is a relatively easy to learn but may not be useful algorithm. Below are two blogs that ...
- history命令的优化
前言 默认的history记录的信息有限,我们对这个进行一定的扩充 我们看下大概哪几个需求 记录用户登陆的ip 记录用户的名称 记录执行命令的时间 具体实现 我们看下应该怎么做这个,尽量在不改变用户的 ...
- bootstrap-datetimepicker 编辑回显
官网上居然没给出解决方案....汗 stackoverflow给出了灵感: $("#dateOfManufacture").find("input").val( ...
- rootfs如何取消登录超时
一种简便的办法,在etc/inittab文件中,增加一行::respawn:-/bin/login.之后当登录超时后,还会在进入到登录界面,就不会出现登录超时后无法在登录的问题了. #first:ru ...
- SpringBoot WebSocket 消息交互
1. Websocket原理 Websocket协议本质上是一个基于TCP的独立协议,能够在浏览器和服务器之间建立双向连接,以基于消息的机制,赋予浏览器和服务器间实时通信能力. WebSocket资源 ...