Django-模板
- Django中的模板是由 html充当的、默认存储在 templates 下
模板中常见的标签
输出标签 {{ key }}
判断标签
{% if 条件 %} {% elif 条件 %} {% else %} {% endif %}
{% ifequal a b %} {% endifequal %} => 相当于 python 中 if ab
{% ifnotequal a b %} {% endifnotequal %} ===> 相当于 python 中 if a!=b
循环标签
{% for var in list %}
{% empty %}
– list 如果为空,显示的内容
{% endfor %}
在 for 标签中,内置了一个 forloop 对象
forloop是一个字典格式的数据、内置的键
- parentloop: django视图函数 render传过来的 forloop的值
- counter0 索引
- counter 索引 + 1
- revcounter0 倒叙索引
- revcounter 倒叙索引 + 1
- first 是否是第一条记录
- last 是否是最后一条记录
load 标签
{% load static %}
static 标签
- 用来加载静态资源,在使用 static 标签的时候,必须先 {% load static %}
{% static ‘css/index.css’ %} ====> /static/css/index.css, 前提是 STATIC_URL = /static/
url 标签
- 在模板中,经常会定义路由地址, url标签主要是用来 通过 路由的名称 获取路由的地址 (路由反向解析技术)
{% url 路由名称 路由参数… %}
include 标签
- 将模板中重复的内容,提取到一个 新的模板中、在原模板中,通过 include 动态加载 新模板中的内容,以达到代码的重复使用
{% include ‘xxxx.html’ %}
block 标签
- 在 父模板中,使用 block 定义块
- 在 子模板中,填充块
extends 标签
- 在 子模板中,使用 extends 标签 继承 父模板
模板中常见的内置过滤器
- 对模板中的数据进行过滤、加工处理
- 过滤器本质上是一个 python 函数
- django内置的过滤器 defaultfilters.py 中定义
过滤器 | 说明 | 备注 |
---|---|---|
capfirst | 首字母转大写 | |
floatformat | 小数格式化 | 保留小数 |
lower | 转小写 | |
make_list | 转列表 | |
truncatechars | 截取指定长度的字符 | {{str:truncatechars:4}} |
upper | 转大写 | |
wordcount | 统计单词个数 | |
ljust | 左对齐 | 如果长度不够指定的位置,则在右边补空格 |
rjust | 右对齐 | 如果长度不够指定的位置,则在左边补空格 |
cut | 去掉字符串中指定的字符串 | |
safe | 代表要过滤器的字符串是允许使用html标签的 | 尽量不要使用,易存在 XSS攻击 |
first | 获取第一个元素 | |
join | 通过指定的分隔符连接list,形成一个字符串 | |
last | 获取最后一个元素 | |
length | 获取长度 | |
lenght_is | 判断长度是否是指定的长度 | |
random | 随机从指定的数据中获取一个元素 | |
add | 数字 + 运算 | |
date | 格式化日期 | Y-m-d H:i:s |
default | 对None设置默认值 | |
filesizeformat | 文件大小的格式化 |
django模板 自定义过滤器
- 过滤器必须在某个应用下,才能生效
自定义过滤器的步骤
- 在
resource
应用下,新建一个templatetags
包 (名字是固定的) - 在 settings.py 配置文件的 INSTALLED_APPS 下激活
INSTALLED_APPS = [
...
'resource.templatetags',
]
- 在 templatetags 包下、新建一个 extra_filters.py (名字是随意的)
from django.template.library import Library
# 创建一个 Libray 对象, 是用来注册 自定义的过滤器
register = Library()
@register.filter
def ext(value):
allows_ext_list = ["doc", "docx", "exe", "pdf", "ppt", "rar", "txt", "xlsx", "zip"]
return value if value in allows_ext_list else "unknow"
- 在模板中,使用 load 标签,加载 自定义过滤器模块
{% load extra_filters %}
- 使用过滤器
value|filter:args