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:模板的导入
'''

模板的继承

类似于面向对象的继承:继承了某个页面就可以使用该页面上所有的资源。

前提:多个页面的多个版块相同或相似,只有少部分版块是自己独有的,将共有的部分全部提出封装,包含了页面大部分版块结构,所以我们称呼其为母版。

解决:采用模板语言复用 母版 来解决,通过多个页面继承母版,值书写自己独有的版块俩减少代码的冗余。

模板继承的运用:

  1. 先封装母版:大部分版块相同或相似的base.html,在特点的位置留出响应的block接口;通过block划定将来可以被修改的区域
  2. 每个需要运用母版页面的页面来继承母版:{% extends '母版页面的路径'%}
  3. 在自己的页面中的任意位置书写block中自身独有的页面内容 {{% block block名 %}}……{% endblock %}
  4. 如果需要继承母版block中原有的内容,使用{{ block.super }}来获取

 

posted @   *sunflower*  阅读(65)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示