Django模板语法 过滤器 继承

60 篇文章 0 订阅
订阅专栏

模板语法之过滤器(类似于内置函数)

"""
使用的时候可以看看源码
"""
1.语法结构
    {{ 数据对象|过滤器名称:参数 }}  过滤器最多只能额外传输一个参数
2.常见过滤器(django模板语法提供了60+过滤器 我们了解几个即可)
    <p>统计数据的长度:{{ s1|length }}</p>
    <p>算术加法或者字符串加法:{{ n1|add:111 }}、{{ s1|add:'big baby' }}</p>
    <p>将数字转成合适的文件计量单位:{{ file_size|filesizeformat }}、{{ file_size1|filesizeformat }}</p>
    <p>判断当前数据对象对应的布尔值是否是False:{{ b|default:'前面的值对应的布尔值是False' }}、{{ s1|default:'前面的值对应的布尔值是False' }}</p>
    <p>时间格式化:{{ ctime|date:'Y-m-d' }}</p>
    <p>索引切片:{{ s1|slice:'0:8' }}</p>
    <p>按照空格截取指定个数的文本:{{ s2|truncatewords:5 }}、{{ s1|truncatewords:1 }}</p>
    <p>按照字符个数截取文本(包含三个点):{{ s2|truncatechars:5 }}、{{ s1|truncatechars:10 }}</p>
    <p>移除指定的字符:{{ info|cut:'|' }}</p>
    <p>是否取消转换:{{ tag1 }}、{{ tag1|safe }}、{{ scripts1|safe }}、{{ res }}</p>
      
ps:最后一个|safe启发了我们以后用django开发全栈项目前端页面代码(主要指HTML代码)也可以在后端编写

 

模板语法之标签

"""
在django模板语法中写标签的时候 只需要写关键字然后tab键就会自动补全
"""
1.语法结构
  {% 名字 ...%}
  {% end名字 %}
2.if判断
  {% if 条件1 %}
    <p>你好啊</p>
  {% elif 条件2 %}
    <p>他好呀</p>
  {% else %}
    <p>大家好</p>
  {% endif %}
3.for循环
    提供了forloop关键字
    {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 4, 'revcounter0': 3, 'first': True, 'last': False}
  {% 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 %}
  """
ps:针对字典同样提供了keys、values、items方法

自定义过滤器、标签、inclusion_tag

"""
1.在应用下需要创建一个名为templatetags的文件夹
2.在该文件夹内创建一个任意名称的py文件
3.在该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页面 之后将渲染的结果放到调用的位置'''

 

模板语法的导入(了解)

类似于将html页面上的局部页面做成模块的形式 哪个地方想要直接导入即可展示

eg:有一个非常好看的获取用户数据的页面 需要在网站的多个页面上使用
   策略1:拷贝多份即可
   策略2:模板的导入
   
使用方式
   {% include 'menu.html' %}

注释语法补充

<!---->  是HTML的注释语法
{##}     是django模板语法的注释
"""
HTML的注释可以在前端浏览器页面上直接查看到
模板语法的注释只能在后端查看 前端浏览器查看不了
"""

模板的继承

类似于面向对象的继承:继承了某个页面就可以使用该页面上所有的资源
  
有很多网站的很多页面 其实都是差不多的 只是局部有所变化 模板的继承可以很好的实现该需求

1.先在模板中通过block划定将来可以被修改的区域
  {% block content %}
      <h1>主页内容</h1>
  {% endblock %}
2.子板继承模板
  {% extends 'home.html' %}
3.修改划定的区域
  {% block content %}
      <h1>登录内容</h1>
  {% endblock %}
4.子页面还可以重复使用父页面的内容
  {{ block.super }}
"""
模板上最少应该有三个区域
    css区域、内容区域、js区域
子页面就可以有自己独立的css、js、内容
"""

 

前期的数据准备

"""
django自带的sqlite3数据库 功能很少 并且针对日期类型不精确

1.数据库正向迁移命令(将类操作映射到表中)
  python3 manage.py makemigrations
  python3 manage.py migrate
2.数据库反向迁移命令(将表映射成类)
    python3 manage.py inspectdb
"""
"""
auto_now:每次修改数据的时候都会自动更新当前时间
auto_now_add:在数据被创建出来的时候会自动记录当前时间 之后不人为修改的情况下保持不变
"""
需求
    我们只想操作orm 不想使用网络请求
    需要有专门的测试环境
    去到manage.py文件中复制前四行,然后放到app01.py下面的tests.py中
    1.自己搭建
        import os
            if __name__ == "__main__":
                os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day54.settings")
                import django
                django.setup()
    2.pycharm提供
      python console

all与filter操作方法

res = models.User.objects.all()  # 查询所有的数据 QuerySet 可以看成是列表套对象
res = models.User.objects.filter()  # 括号内填写筛选条件 不写相当于all() QuerySet 可以看成是列表套对象
res = models.User.objects.filter(pk=1)  # 想通过主键筛选数据 可以直接写pk 会自动定位到当前表的主键字段 无需你自己查看具体字段名称  <QuerySet [<User: 对象:jason>]>
res = models.User.objects.filter(pk=1)[0]  # 直接获取数据对象   对象:jason  QuerySet支持索引取值 但是Django不推荐使用 因为索引不存在会直接报错
res = models.User.objects.filter(pk=1).first()  # 获取结果集中的第一个对象  对象:jason  推荐使用封装的方法 不会出现索引超出范围报错的情况
res = models.User.objects.filter(pk=1, name='kevin').first()  # 括号内支持填写多个筛选条件 默认是and关系
res = models.User.objects.filter().filter().filter().filter()  # 只要是QuerySet对象就可以继续点对象方法(类似于jQuery链式操作)
res = models.User.objects.filter().last()  # 获取结果集中最后一个对象


# all()
  查询所有数据
# filter
  相当于查询里的where,做筛选条件
# 主键筛选
  filter(pk=1) # 会自动找到当前表的主键字段
# 链式操作
  filter().filter().filter()...


# 对象被执行打印操作自动触发 该代码跟数据库没有关系 无需重新执行迁移命令
def __str__(self):
    return '对象:%s' % self.name

ORM操作关键字

# values()
    获取想要的字段括号里写字段名,结果是列表套字典
# values_list()
    返回一个可抵达的元组序列
# distinct()
    去重,如果数据对象中有主键,不可能去重,必须要数据完全一样
# order_by()
    排序,括号里面写字段名,默认升序,字段前面加符号降序
# exclude()
    取反操作,符合括号里条件的数据不取
# reverse()
    已有排序的结果反向排序
# count()
    统计结果集的数量
# exists()
    判断结果集是否有数据,有返回True,无返回False
# get()
    直接获取对象,不推荐使用,条件不存在直接报错

res = models.User.objects.all().values('name', 'age')  # QuerySet 可以看成是列表套字典
res = models.User.objects.values('name', 'age')  # QuerySet 可以看成是列表套字典 指定字段 all不写也表示从所有数据中操作
res = models.User.objects.filter(pk=1).values('name')  # 可以看成是对结果集进行字段的筛选
res = models.User.objects.all().values_list('name', 'age')  # QuerySet 可以看成是列表套元组

res = models.User.objects.all().distinct()  # 数据对象中如果包含主键 不可能去重
res = models.User.objects.values('name').distinct()  # 这样就可以去重

res = models.User.objects.order_by('age')  # 默认是升序
res = models.User.objects.order_by('-age')  # 该为降序
res = models.User.objects.order_by('age', 'pk')  # 也支持多个字段依次排序

res = models.User.objects.exclude(name='jason')  # 取反操作

res = models.User.objects.reverse()  # 不起作用
res1 = models.User.objects.order_by('age').reverse()  # 只有在order_by排序之后才可以
print(res1)
res = models.User.objects.order_by('age')

res = models.User.objects.count()  # 统计结果集的个数

res = models.User.objects.exists()
res = models.User.objects.filter(name='jasonNV').exists()  # 判断结果集中是否有数据 有返回Ture 否则False

res = models.User.objects.get(pk=1)  # 直接获取数据对象 但是不推荐使用
res = models.User.objects.get(pk=100)  # 条件不存在 直接报错
res = models.User.objects.filter(pk=100)  # 条件不存在 返回空

Django基础模板标签与filter的使用方法
爱人BT的博客
09-12 1406
一、基本的模板语言 1、变量 {{ }} 1.1、进入Django shell 环境 python manage.py shell 1.2、Context、Template 模块的基本使用 from django.template import Context,Template t = Template('My name id {{ name }}') c = Context({'...
Django模板中常用过滤器(filter)
You_are_my_dream的博客
11-07 5085
在使用模板中的过滤器和标签的时候,不熟悉官方文档的话。空格一定不要乱加,以官方文档为主,有时候乱加空格可能会报错。 所有内容在官方文档(打开链接)中,下面是常用的几个 1.add 给变量加上相应的值 2.addslashes 给变量中的引号前加上斜线 3.capfirst 首字母大写 4.cut 从字符串中移除指定的字符 5.date(必须要获取一个日期的对象才能进行格式化,不
Python】【进阶篇】26、Django模板过滤器用法详解
deepboat的博客
05-08 1029
Python】【进阶篇】26、Django模板过滤器用法详解
Django中自定义filter并在template中使用
l497626363的专栏
11-28 2089
Django内置的filter有很多,然而我们由于业务逻辑的特殊要求,有时候仍然会不够用,这个时候就需要我们自定义filter来实现相应的内容。接下来让我们从自定义一个get_range(value)来产生列表的filter开始吧。首先在你的django app的models.py的同级目录建立一个templatetags的文件夹,并在里面新建一个init.py的空文件,这个文件确保了这个文件夹被当
django模板模板语法 过滤器 模板导入与继承
Waller_的博客
02-06 382
django模板=HTML代码+模板语法 存放于templates目录下的html文件称之为模板文件,如果我们想要返回的html页面中的数据是动态的,那么必须在html页面中嵌入变量,这便用到了django模板语法,具体来说,django模板语法有以下重点 {{ }} 变量相关 {% %} 逻辑相关 模板语法之变量 基本使用 如果html代码中的数据不是固定死的,而是动态变化的...
Django 模板语法
go|Python的个人博客
02-20 1033
模板语法中:模板语法的使用 前端页面 展示结果 基本语法: 后端补充代码 展示结果 模板语法之标签 标签就是一堆逻辑,包括for循环 if判断等 注意: 自定义过滤器: 自定义标签: 自定义inclusion_tag:内部原理 总结: 当html页面某一个地方的页面需要传参数才能够动态的渲染出来,并且多个页面上都需要使用该局部 那么就考虑将改局部页面做成inclusion_tah形式 模板继承的实现:模板页面的创建(home.html) 子页面继承...
二、Django模板语法
魏志标的博客
05-16 2460
一、模板语法简介 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术。它实现了把前端代码和服务端代码分离的作用,让项目中的业务逻辑代码和数据表现代码分离,让前端开发者和服务端开发者可以更好的完成协同开发。 静态网页:页面上的数据都是写死的,万年不变 动态网页:页面上的数据是从后端动态获取的(比如后端获取当前时间;后端获取数据库数据然后传递给前端页面) 要在django框架中使用模板引擎把视图中的数据更好的展示给客户端,需要完成3个步骤: 在项目配置文件中指定保存模板文件的模板
Django模板过滤器继承
NGUP_LEE的博客
10-29 132
模板过滤器 定义:在变量输出时对变量的值进行处理 作用:可以通过使用过滤器来改变变量的输出显示 语法:{{变量 | 过滤器:'参数值1' | 过滤器2:'参数值2' ...}} 常用的过滤器 过滤器 说明 lower 将字符串全部转换为小写 upper 将字符串全部转换为大写 safe 默认不对变量内的字符串进行 html 转义 add:“n” 将calue值增加n truncatechars:‘n’ 如果字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序
4.Django 模板语法
清风
03-07 1487
文章目录1. FBV与CBV1.1 FBV1.2 CBV1.3 CBV源码解析1.启动程序时2.请求来的时候2. 模板层2.1 模板语法2.2 测试环境1. 路由层2. 视图层3.前端页面2.3 基本数据类型传递2.4 传递函数结果3. 过滤器3.1 常见过滤器1. 统计长度2.默认值3.文件大小4.日期格式5.切片操作6.切取字符7.切取单词8.移除特定的字符9.拼接操作10.加法11.前端转义4. 标签4.1 for循环4.2 forloop 参数4.3 if判断4.4 for 与 if 混用4.5 e
Python Django模板模板过滤器与自定义模板过滤器示例
12-31
本文实例讲述了Python Django模板模板过滤器与自定义模板过滤器。分享给大家供大家参考,具体如下: 模板过滤器 过滤器用于对模板变量进行操作。 date:改变日期的显示格式。 length:求长度。字符串,列表。 ...
Django模板语法视图向模板发送数据
03-14
通过本节可以学到: 1. 向模板中传递数据 2. 不同python数据类型填充模板 3. 模板中使用判断语句 4. 模板中使用循环语句
Django自定义模板过滤器和标签的实现方法
09-18
主要介绍了Django自定义模板过滤器和标签的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
详解Django中的过滤器
12-24
就象本章前面提到的一样,模板过滤器是在变量被显示前修改它的值的一个简单方法。 过滤器使用管道字符,如下所示: {{ name|lower }} 显示的内容是变量 {{ name }} 被过滤器 lower 处理后的结果,它功能是转换文本...
Python Django 5 Web应用开发实战
zgw555555的专栏
06-11 708
Django 是一个高级 Python Web 框架,它鼓励快速开发和简洁、务实的设计。下面是一个关于如何使用 Django 开发一个包含五个基本页面的 Web 应用的实战指南。请注意,这里仅提供一个概述,实际开发中会有更多细节和步骤。
Django中使用下拉列表过滤HTML表格数据
最新发布
weixin_44617651的博客
06-13 892
Django中,你可以使用下拉列表(即选择框)来过滤HTML表格中的数据。这通常涉及两个主要步骤:创建过滤表单和处理过滤逻辑。
51.Python-web框架-Django开始第一个应用的增删改查
智盟科技智能制造团队的博客
06-12 1081
这里可以创建任意多个模型。name = models.CharField(verbose_name='部门名称', max_length=200,)description = models.TextField(verbose_name='部门描述', blank=True, null=True)parent = models.IntegerField(verbose_name='父部门', blank=True, null=True, default=0)
50.Python-web框架-Django中引入静态的bootstrap样式
智盟科技智能制造团队的博客
06-12 797
Bootstrap 是一个非常流行的前端开发框架,用于快速构建响应式和移动优先的网站。
python操作数据库,django操作数据库
qq_34631220的博客
06-08 492
如果熟练使用Mysql或SQLyog这类可视化工具操作数据库的话,这步可以省略。工程同名app下的settings.py。使用models必须创建模型。子应用的models.py。子应用中的admin.py。
django中的模板语法
04-07
Django中的模板语法可以分为以下几类: 1. 变量输出:可以使用{{ variable }}输出模板变量的值。 2. 标签:可以使用{% tag %}来调用模板标签,例如循环标签{% for %}、条件标签{% if %}等。 3. 注释:可以使用{# ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Python 十五个炫酷代码 12545
  • Windows系统Git安装教程(详细Git安装过程) 10252
  • net start MySQL 启动服务时 ,显示“MySQL 服务正在启动 MySQL 服务无法启动 服务没有报告任何错误 9091
  • MongoDB 备份与恢复 4678
  • Python飞机大战小游戏 4266

分类专栏

  • Go 63篇
  • 分布式 9篇
  • Nginx 3篇
  • MySQL 33篇
  • 微服务 1篇
  • 算法+数据结构 6篇
  • Redis 8篇
  • 前端React Vue 11篇
  • Mac 8篇
  • Kafka 3篇
  • Python 60篇
  • Git 5篇
  • Docker 2篇
  • 计算机基础 3篇
  • Linux 9篇
  • Web安全 3篇
  • HTTP/TCP/IP 7篇
  • WebSocket 4篇
  • Elasticsearch  3篇
  • 数据分析 3篇
  • K8S 4篇
  • 爬虫 3篇
  • MongoDB 6篇
  • C/C++ 5篇

最新评论

  • net start MySQL 启动服务时 ,显示“MySQL 服务正在启动 MySQL 服务无法启动 服务没有报告任何错误

    future_in_life: 怎么看?

  • 深度学习Redis(1):Redis内存模型

    键盘国治理专家: 作者是您原创的吗?我在一个微信公众号上也看到了

  • net start MySQL 启动服务时 ,显示“MySQL 服务正在启动 MySQL 服务无法启动 服务没有报告任何错误

    Lamb!: 看自己mysql的配置文件

  • net start MySQL 启动服务时 ,显示“MySQL 服务正在启动 MySQL 服务无法启动 服务没有报告任何错误

    暗中讨饭474: 请问没有找到3306怎么解决

  • 解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码.重新安装程序可能会解决此问题。

    Lamb!: 提示什么

大家在看

  • SpringBoot3+Vue3 前后端分离项目实现基于RBAC权限访问控制-(1)权限管理 21
  • 使用Velero和Restic进行Kubernetes持久卷备份 1040
  • 15天系统化入门AI产品经理,打好入行基础,抢占时代红利!! 139
  • 【Java】 将字节数组转换为十六进制字符串:Java实现指南 613
  • MyCat - 源代码篇(1)

最新文章

  • Golang 并发控制方式有哪些
  • Go 为什么建议使用切片,少使用数组?
  • Go 如何应对高并发 | 高并发详解
2024年3篇
2023年176篇
2022年82篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lamb!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司延边百度竞价包年推广报价乌海网站建设设计推荐漯河百度网站优化排名推荐红河网站优化排名公司梅州关键词排名包年推广哪家好凉山网站优化按天收费多少钱朝阳百搜标王哪家好温州关键词排名包年推广价格庆阳网站推广报价南昌百度seo公司福州企业网站设计价格温州网站优化软件哪家好濮阳外贸网站制作多少钱承德百度网站优化排名多少钱崇左百度爱采购推荐大鹏SEO按效果付费多少钱鄂州网站改版张掖seo网站推广多少钱绵阳至尊标王临汾模板推广公司河池如何制作网站多少钱安顺seo排名哪家好潍坊网站建设哪家好玉林seo推荐龙华seo网站优化日照网站优化按天扣费报价淮安SEO按天扣费沙井阿里店铺运营价格梧州网站建设公司通化百度网站优化推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化