Django模板语法
一、Python的模板:HTML代码 + 模板语法
二、模板语法需掌握以下几个用法
- 传值
- 过滤器
- 标签
- 继承
- 导入模板
三、简要介绍
1. 模板语法之传值
{{ }} # 一般给变量使用相关 {% %} # 一般跟逻辑相关的
模板中使用函数,类,调用方法等,都不要加括号 查询、引用对象方法等,一律使用点语法(句点符)
2. 模板语法之过滤器
# 相当于python的内置函数
语法:
{{ 变量|过滤器:参数 }}
'''
竖杠左边的变量当成过滤器的第一个参数,冒号后面的当成第二个参数;
如果冒号后面没有参数了,那就是只有一个参数;
过滤器最多传递两个参数。
'''
# 过滤器有很多个,大概有六七十个,我们需要掌握四五个就行
1. length:返回值的长度。它对字符串和列表都起作用。{{ value|length }}
2. default:如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。{{ value|default:"nothing"}}
3. date:格式化时间。{{ ctime| date:'Y-m-d H-i-s' }}
4. filesizeformat: 将值格式化为一个可读的文件大小。{{ value|filesizeformat }}
5. safe:取消转义。{{ value|safe}}
'''
Django的模板中会对HTML标签和JS等语法标签进行自动转义,是保护HTML标签的源文件。
和安全相关的:
1. MySQL中会出现SQL注入的问题
2. 前端中会出现xss攻击
3. django中的form表单中会出现csrf跨站请求问题
'''
'''xss攻击:不让外部的标签直接生效'''
# 前端的代码有时候也可以在后端写好,然后传递到前端使用。
from django.utils.safestring import mark_safe
s = mark_safe('<h1>xss攻击</h1>')
3. 标签
# 在html中可以使用 if else for循环等 # for 标签 {% for foo in l %} {{ forloop }} <p> {{ foo }} </p> {% endfor %}
# if 标签 {% for foo in l %} {% if forloop.first %} <p> 第一个 </p> {% elif forloop.last %} <p> 最后一个 </p> {% else %} <p> {{ foo }} </p> {% endif %} {% endfor %}
# for循环遍历字典 {% for foo in d.keys %} <p> {{ foo }} </p> {% endfor %} {% for foo in d.values %} <p> {{ foo }} </p> {% endfor %} {% for foo in d.items %} <p> {{ foo }} </p> {% endfor %}
4. 继承
Django模版引擎中最强大也是最复杂的部分就是模版继承。
首先,在父模板中搭建基础模板,并且定义能够被子模版覆盖的 blocks 。blocks标签中的内容,代表这能被子模板覆盖。
其次,在子模板中,使用extends标签,继承父模板。同时,使用block标签重写需要替换的内容。
{% extends 'home.html' %} {% block content %} <h1>登录页面</h1> <form action=""> <p>username: <input type="text" class="form-control"></p> <p>password: <input type="text" class="form-control"></p> <input type="submit" class="btn btn-success btn-block"> </form> {% endblock %}
5. 导入模板
语法:{% include '模版名称' %} 如:{% include 'index.html' %}