Django框架05
模板语法之过滤器
过滤器的语法结构:
''' 过滤器的语法结构: {{ 变量|过滤器1[[:参数]|...|过滤器n[:参数]] }} 注:过滤器可以串联操作,可以拥有0个或1个参数 '''
Django模板语法提供了60+的过滤器,了解常见的过滤器使用。
常见的过滤器(常见的内置filter):
''' 1、增加 add:num>>>: <p>{{ n1|add:111 }}、{{ s1|add:'big baby' }}</p> 2、统计字符串长度 length >>>:</p>{{ s1|length }}</p> 3、默认值 default:'默认值'>>>:变量不存在或为空(判断当前数据对象对应的布尔值是否是False) >>>:<p>{{ b|default:'前面的值对应的布尔值是False' }}、 {{s1|default:'前面的值对应的布尔值是False' }}</p> 4、全大写 upper 5、全小写 lower 6、切片 slice:'0:-1' >>>:<p>{{ s1|slice:'0:8' }}</p> 7、将数字转换为文件大小 filesizeformat>>>: <p>{{ file_size|filesizeformat }}、{{ file_size1|filesizeformat }}</p> 8、字符串隐藏 truncatechars:13 # 只显示10个字符,后置字符都用...来替代 9、时间格式化 date:'Y-m-d' >>>: <p>{{ ctime|date:'Y-m-d' }}</p> 10、转换 是否取消转换: safe>>>: <p>{{ tag1 }}、{{ tag1|safe }}、{{ scripts1|safe }}、{{ res }}</p> 11、移除指定的字符:<p>{{ info|cut:'|' }}</p> 12、按照空格截取指定个数的文本:>>>: <p>{{ s2|truncatewords:5 }}、{{ s1|truncatewords:1 }}</p> 13、按照字符个数截取文本(包含三个点):>>>: <p>{{ s2|truncatechars:5 }}、{{ s1|truncatechars:10 }}</p> '''
模板语法之标签
在Django模板语法中写标签的时候,只需要写关键字然后tab键就会自动补全。
标签的的语法结构:
''' 标签的语法结构: {% 关键词 arg1 ... argn %} eg: {% url 'test' 1 2 3 %} => /test/1/2/3/ '''
标签常用:
''' 反向解析url {% url 'namespace:url_name' arg1 arg2 %} 当前时间now {% now 'Y-m-d' %} 起别名with {% with '后面的别名flag就代表我' as flag %} {{ flag }} {% endwith %} Django CSRF认证 {% csrf_token %} '''
条件分支:
''' if判断条件语法结构: {% if 条件1 %} 结论1 {% elif 条件2 %} 结论2 {% else %} 结论n {% endif %} 注: 1. if的条件可以添加filter 2. 可以嵌套 '''
''' for循环的语法结构: {% for i in l1 %} <p>{{ i }}</p> {% endfor %} '''
''' for和if的组合使用: {% for i in l1 %} {% if forloop.first %} <p>这是第一次循环</p> {% elif forloop.last %} <p>这是最后一次循环</p> {% else %} <p>中间循环</p> {% endif %} {% empty %} <p>for循环对象为空 自动执行</p> {% endfor %} '''
自定义过滤器和标签
''' 步骤: 1.在注册的app下创建templatetags包 2.在这个文件夹中自定义模块py文件,如:Grace_tags.py 3.要在使用自定义filter与tag的模板中加载自定义模块py文件,案例:{%load Grace_tags%} 需要提前在此py文件中添加固定的代码: from django import template register = template.Library() '''
自定义过滤器:只能接收两个参数
@register.filter(is_safe=True) def index(a, b): return a + b {% load mytag %} {{ n1|index:666 }}
自定义简单标签:可以接收任意的参数
@register.simple_tag(name='my_tag') def func1(a, b, c, d): return a + b + c + d {% my_tag 1 2 3 4 %} # 参数之间空格隔开即可
自定义inclusion_tag标签
@register.inclusion_tag('left.html') def func2(n): l1 = [] for i in range(1, n + 1): l1.append(f'第{i}页') return locals() {% func2 10 %} ###left.html### <ul> {% for foo in l1 %} <li>{{ foo }}</li> {% endfor %} </ul>
模板导入
类似于将html页面上的局部页面做成模块的形式,哪个地方想要直接导入,即可展示。
前提:多个页面有一个相同的页面板块(多个有样式标签的集合体)。
运用:将多个样式标签的集合进行封装,对外提供板块的名字(接口),在有该版块的页面中直接导入即可。
语法:{% include '版块页面的路径'%}
''' eg:有一个非常好看的获取用户数据的页面 需要在网站的多个页面上使用 策略1:拷贝多份即可 策略2:模板的导入 '''
模板的继承
类似于面向对象的继承:继承了某个页面就可以使用该页面上所有的资源。
前提:多个页面的多个版块相同或相似,只有少部分版块是自己独有的,将共有的部分全部提出封装,包含了页面大部分版块结构,所以我们称呼其为母版。
解决:采用模板语言复用 母版 来解决,通过多个页面继承母版,值书写自己独有的版块俩减少代码的冗余。
模板继承的运用:
- 先封装母版:大部分版块相同或相似的base.html,在特点的位置留出响应的block接口;通过block划定将来可以被修改的区域
- 每个需要运用母版页面的页面来继承母版:{% extends '母版页面的路径'%}
- 在自己的页面中的任意位置书写block中自身独有的页面内容 {{% block block名 %}}……{% endblock %}
- 如果需要继承母版block中原有的内容,使用{{ block.super }}来获取
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?