Django模版
- 模版
- 在Django框架中,模版是可以帮助开发者快速生成呈献给用户页面的工具
- 模版的设计方式实现了我们MVT中VT的解耦,VT有着N:M的关系,一个V可以调用任意T,一个T可以供任意V使用
- 模版处理分两个过程:加载和渲染
- 摘要
- 模版主要有两个部分
- HTML静态代码
- 动态插入的代码段
- 模版中的动态代码块段除了做基本的静态填充,还可以实现一些基本运算,转换和逻辑
- 模版中的变量:
- 视图传递给模板的数据
- 遵守标识符规则
- 语法{{ var }}
- 如果变量不存在,则插入空字符串
- 模块中的点语法:grades grade
- 字典查询
- 属性或者方法 grade.gname
- 索引 grades.0.gname
- 模版中的小弊端,调用对象的方法,不能传递参数
- 模版中的标签
- 语法{% tag %}
- 作用:
- 加载外部传入的变量
- 在输出中创建文本
- 控制循环或逻辑
- 模版主要有两个部分
if
- 格式:
1. {%if 表达式 %} 语句 {% endif %} 2. {%if 表达式 %} 语句 {% else %} 语句 {% endif %} 3. {%if 表达式 %} 语句 {% elif %} 语句 {% endif %}
for
- 格式:
{% for 变量 in 列表 %} 语句1 {% empty %} 语句2 {% endfor %}
- 当列表为空或不存在时,执行empty之后的语句
- {{ forloop.counter }}表示当前是第几次循环,从1数数
- {{ forloop.counter0 }}表示当前是第几次循环,从0数数
- {{ forloop.revcounter }}表示当前是第几次循环,倒着数数,到1停
- {{ forloop.revcounter0 }}表示当前是第几次循环,倒着数数,到0停
- {{ forloop.first }}是否是第一个 布尔值
- {{ forloop.last }}是否是最后一个 布尔值
注释
- 单行注释
- {# 被注释掉的内容 #}
- 多行注释
{# comment #} 内容 {# endcomment #}
操作
-
乘除
- {% widthratio 数 分母 分子 %}
-
整除
- {% if num|divisibleby:20 %}
- 案例:隔行整除
-
ifequal 如果相等
{% ifequal value1 value2 %} 语句 {% endifequal %}
-
ifnotequal 如果不相等
-
url: 反向解析
- {% url’namespace:name’ p1 p2 %}
-
csrf_token用于跨站请求伪造保护的
- 格式{% csrf_token %}
-
过滤器:{{ var|过滤器 }}
- 作用:在变量显示前修改
- add {{ p.page|add:5 }}
- 没有减法过滤器,但是加法里可以加载负数
- {{ p.page|add:-5 }}
大小写 lower {{ p.pname|lower }} upper
- 作用:在变量显示前修改
-
过滤器可以传递参数,参数需要使用引号引起来,比如join:
{{ student|join'=' }}
- 默认值:default,格式{{ var|default value }}
- 如果变量没有被提供或者为False,空,会使用默认值
- 根据指定格式转换日期为字符串,处理时间的就是针对date进行转换{{ dataVal|date:‘y-m-d’}}
-
HTML转义
- 将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的一个问题
渲染成html:{{ code|safe }} {% autoescape off %} code {% endautoescape %} 不想渲染 {% autoescape off %} code {% endautoescape %}
模版继承
- 模版也可以继承
- 关键字block:挖坑
- 用来规划布局
{% block xxx %}
code
{% endblock %}
-
extends 继承,写在开头位置
- {% extends ‘父模版路径’ %}
-
include:加载模版进行渲染
- 格式:{% include ‘模版文件’ %}
-
加上static文件夹后记得在settings中添加
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
静态资源
- 动静分离
- 创建静态文件夹
- 在settings中注册STATICFILES_DIRS = []
- 在模版中使用
- 先加载静态资源{% load static %}
- 使用{% static ‘xxx’ %} xxx相对路径
- 坑点
- 仅在debug模式可用
- 以后需要自己单独处理