总结下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语法 ...
随机推荐
- 解决无法访问 Github
可以正常使用Google,但无法打开Github. 查阅了一些资料,发现需要在hosts文件中添加映射. 在hosts文件中加入两行 140.82.113.4 github.com 140.82.11 ...
- icmp port unreachable
端口不可达: client------>server 结果server回复端口不可达, 由于是icmp报文: 到达client内核协议栈后进入icmp_rcv处理: /* * Deal with ...
- 查找数组中第k大的数
问题: 查找出一给定数组中第k大的数.例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8-- 思考:1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]. 2. ...
- CTDB使用radosobject作为lockfile
前言 服务器的服务做HA有很多种方式,其中有一种就是是用CTDB,之前这个是独立的软件来做HA的,现在已经跟着SAMBA主线里面了,也就是跟着samba发行包一起发行 之前CTDB的模式是需要有一个共 ...
- Git 分支相关
创建分支 git branch dev 切换分支 git checkout dev (dev换成-可切换为上一个使用的分支) 以上两个可合并为 git checkout -b dev 将新分支推送到远 ...
- 为什么说线程太多,cpu切换线程会浪费很多时间?
问题1: 假如有一个计算任务,计算1-100的和,每10个数相加,需要占用一个cpu时间片(1s).如果起一个线程(模拟没有线程切换),完成任务需要多长时间?如果起5个线程,完成任务需要消耗多久时间? ...
- rinetd小工具
一.介绍 tcp端口转发工具,针对ip:port的 连接进行转发.重点开源,且配置简单.不支持ftp,因为ftp要使用多个端口. 1.转发规则 [root@master tmp]# cat a.con ...
- phpmyadmin 4.8.1任意文件包含(CVE-2018-12613)
简介 环境复现:https://gitee.com/xiaohua1998/hctf_2018_warmup 考察知识点:文件包含漏洞(phpmyadmin 4.8.1任意文件包含) 线上平台:榆林学 ...
- web安全原理-文件包含漏洞
前言 起来吃完早饭就开始刷攻防世界的题,一个简单的文件包含题我竟然都做不出来我服了 拿出买的书开始从头学习总结文件包含漏洞! 一.文件包含漏洞 文件包含漏洞 文件包含函数的参数没有经过过滤或者严格的 ...
- 工作一年半被裁掉,机缘巧合拿到阿里P7offer,得亏我看过这份“突击”面试宝典
前言 不论是校招还是社招都避免不了各种⾯试.笔试,如何去准备这些东⻄就显得格外重要.不论是笔试还是⾯试都是有章可循的,我这个"有章可循"说的意思只是说应对技术⾯试是可以提前准备,所 ...