Jinja2学习
模板: 知名模板引擎:jinja2(flask默认的模板引擎) Mako
template模板路径:
1.在渲染模板的时候,会默认从根目录下的templates目录下查找模板文件
2.也可以自定义模板路径,Flask类的构造函数中定义了模板路径参数,所以可以在Flask初始化的时候指定template_folder参数。
模板变量传参:
单个变量可直接放在render_templates()参数中
多个变量,可将参数变量 值放在一个字典中,
render_template()函数中加入**字典名即可
前端使用变量参数:
{{用来存放变量 }}
{% 用来执行函数或者逻辑代码 %}
快捷键:Tab
开始标签 结束标签
jinja的for循环:
{% for foo in list %}
{% if loop.first %}
...
{% endif %}
{% endfor %}
其他loop方法:
loop.last loop.index0(当前迭代的索引,从0开始) loop.index,loop.length (序列的长度)
jinja2模板过滤器:
作用:对后台传到前台的参数进行数据处理
使用:通过管道符号{{变量名|过滤器名 }}
常用过滤器:
默认值过滤器:1.{{ 变量名|default('xxx',boolean=False)}}2.可以使用or来替代default {{ 变量名 or "" }}
转义过滤器:jinja2自动转义默认成字符串,而不是html标签
使用过滤器:防止转义 块区域防止转义:
{% autoescape off %} {% endautoescape%}
单变量防止转义:
{% 变量名|safe %}
某个字符串进行进行转义:
escape
format过滤器:
{{ "我的名字是 %s " |format("hello") }}
其他过滤器:
first last length join int lower replace( old,new) truncate(length=30)截取 striptags string wordcount()计算单词个数
自定义过滤器:
在后端定义函数:自定义函数,然后注册到jinja2模板当中
@app.template_filter('my_func')
def func(value):
value=xxx.x
return value
宏:
概念:模板中的宏和python中的函数类似,也可以传递参数,但不能有返回值,可以将经常用到的代码片段放到宏中,然后把不固定的值抽取出来当成一个变量参数
使用:参数可以为默认值
1.可放在本html问价中
2.也可以放在单独的tml文件中,将它导入 {% from .宏文件名 import 宏 as %}(导入宏文件,路径默认是在templates目录下查找)
变量值的自动传递:
导入宏的时候 若想把被导入宏的html文件的变量值自动传递到宏中,则导入时加入 with context
定义宏:
{% macro input(name,value='',type='{{ value }}' %}
<input type="type" name="{{ name }} " value="{{ value }}">
{% endmacro %}
使用宏:
<p>{{ input('username') }}</p>
<p>{{ input('password',type='text')}} </p>
jinja2的include标签:
1.这个标签相当于直接将模板中的代码复制粘贴到当前位置
2.“include"标签,如果想要使用父模板的变量,直接用就可以了,不需要context
3."include"的路径,直接从templates根目录下查找
set with 定义变量用法:在模板中,可以用set定义变量
Jinja2学习的更多相关文章
- Jinja2学习笔记暨官方文档的翻译
http://blog.csdn.net/lgg201/article/details/4647471 呵呵, 刚刚看完Python模板引擎Jinja2的文档, 感觉很好, 觉得动态语言真是很好. ...
- python-flask-ssti(模版注入漏洞)
SSTI(Server-Side Template Injection) 服务端模板注入 ,就是服务器模板中拼接了恶意用户输入导致各种漏洞.通过模板,Web应用可以把输入转换成特定的HTML文件或者e ...
- Html 前端jinjia2 & ajax
本章内容: jinja2 Ajax中的if语句 参考文档 html可以参照学习:w3school bootstrap学习:bootstrap 综合类学习网站:runoob jinja2学习网站:jin ...
- Flask基础全套
Flask简介 Flask是主流PythonWeb三大框架之一,其特点是短小精悍以及功能强大从而获得众多Pythoner的追捧,相比于Django它更加简单更易上手,Flask拥有非常强大的三方库,提 ...
- 最近在学习Flask框架,那么就说下jinja2吧~~~
jinja是组成Flask的模板引擎,先写一个demo吧 {% block body %} <ul> {% for user in users %} <li><a hre ...
- Python框架学习之Flask中的Jinja2模板
前面也提到过在Flask中最核心的两个组件是Werkzeug和Jinja2模板.其中Werkzeug在前一节已经详细说明了.现在这一节主要是来谈谈Jinja2模板. 一.为什么需要引入模板: 在进行软 ...
- CVE-2019-8341 Jinja2 RCE漏洞学习
漏洞简述 漏洞简介 Jinja2.10版本,Environment的实例方法from_string,存在RCE,该函数在内部实现逻辑中,存在exec函数去执行了,from_string函数参数中的ji ...
- Python模块学习 - jinja2
模板 要了解jinja2,那么需要先理解模板的概念.模板在Python的web开发中广泛使用,它能够有效的将业务逻辑和页面逻辑分开,使代码可读性增强.并且更加容易理解和维护. 模板简单来说就是一个其中 ...
- 【 Python】模块学习之Flask模板引擎:jinja2
原文链接:https://www.cnblogs.com/dachenzi/p/8242713.html 模板的概念 要了解jinja2,那么需要先理解模板的概念.模板在Python的web开发中广泛 ...
随机推荐
- django+pymysql搭建一个管理系统(一)
django+pymysql搭建一个管理系统(一) 后续进行代码更新,优化 一.程序架构 二.mysql表单创建 zouye库:存信息相关的 #班级表 create table classes( ci ...
- Dart的导包
Dart中的库主要有三种: 1.我们自定义的库 import 'lib/xxx.dart'; 2.系统内置库 import 'dart:math'; import 'dart:io'; import ...
- 如何通过字符串形式导包(importlib模块的使用)
1 模块简介 Python提供了importlib包作为标准库的一部分.目的就是提供Python中import语句的实现(以及__import__函数).另外,importlib允许程序员创建他们自定 ...
- runloop 小记
一.什么是runLoop 1.说白了,runloop就是运行循环 2.runloop,他是多线程的法宝 通常来讲,一个线程一次只能执行一个任务,执行完之后就退出线程.但是,对于主线程是不能退出的,因此 ...
- 01—mybatis开山篇
什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.M ...
- 简单的理解 equals和==的区别
直接上代码: //== 比较的是地址 String test = new String("测试"); String test1 = new String("测试" ...
- Series拼接回DataFrame
从这样的表,如何计算一行汇总层拼接回去
- BZOJ 3038: 上帝造题的七分钟2 / BZOJ 3211: 花神游历各国 (线段树区间开平方)
题意 给出一些数,有两种操作.(1)将区间内每一个数开方(2)查询每一段区间的和 分析 普通的线段树保留修改+开方优化.可以知道当一个数为0或1时,无论开方几次,答案仍然相同.所以设置flag=1变表 ...
- redis常见问题(转)
常见问题:1.为什么使用redis(一)性能我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存.这样,后面的请求就去缓存中读取,使得请求能够迅速响应.(二)并发在大并 ...
- ORM高阶补充:only, defer,select_related
Queryset官方文档:https://docs.djangoproject.com/en/1.11/ref/models/querysets/ 1.需求1:只取某n列 1.方法1:values 2 ...