Django(11)-模板层的过滤器和继承

Django(1)-简介

Django(2)-创建项目及默认项目目录结构介绍

Django(3)-配置文件详解

Django(4)-URL和视图

Django(5)-路由配置实例

Django(6)-请求及响应

Django(7)-Get请求和Post请求

Django(8)-设计模式

Django(9)-模板层简介与入门实例

Django(10)-模板层的变量和标签

Django(11)-模板层的过滤器和继承

Django(12)-url反向解析

Django(13)-静态文件

Django(14)-应用及分布式路由

Django(15)-模型层及ORM介绍

Django(16)-ORM基础字段及选项

Django(17)-ORM创建数据

Django(18)-ORM常用的查询函数详解及实例演示

Django(19)-ORM条件查询

Django(20)-ORM更新操作及实例演示

Django(21)-ORM删除操作及实例演示

Django(22)-ORM中F对象和Q对象

Django(23)-ORM聚合查询和原生数据库操作

Django(24)-admin后台管理设置步骤以及常见样式详解

Django实战技巧(1)-开发测试生产环境配置切换处理技巧

Django实战技巧(2)-git代码仓分支管理技巧

Django实战技巧(3)-项目配置

1、模板过滤器

  • 定义:在变量输出时对变量的值进行处理
  • 作用:可以通过使用过滤器来改变变量的输出和显示
  • 语法:{{变量 | 过滤器1:‘参数1’|过滤器2:'参数2’}}

2、常见的过滤器

  • lower:将字符串全部转换为小写
  • upper:将字符串转换为大写
  • safe:默认不对变量内的字符串进行html转义
  • add:‘n’:将value的值加n
  • truncatechars:‘n’:如果字符串字符多余指定的字符数量,那么会被截断,截断的字符串将以可翻译的省略号序列(…)结尾

实例:
设计路由如下:
在这里插入图片描述
视图函数如下:

from django.shortcuts import render

def test_filter(request):

    str="Hello Tom"
    num=100
    html="<body>hello</body>"
    return render(request,"test_html.html",locals())

在templates目录下创建test_html.html文件,内容太如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test_for</title>
</head>
<body>
<p>字符串小写:{{str|lower}}</p>
<p>字符串大写:{{str|upper}}</p>
<p>整数加法:{{num|add:'200'}}</p>
<p>html 默认:{{html}}</p>
<p>html safe:{{html|safe}}</p>
</body>
</html>

在浏览器打开http://127.0.0.1:8080/test_filter,结果如下:这里可以看出,django默认的是把html文本作为纯文本处理的,只有显示的告诉django这是safe的,django才会按照html的语法去解析
在这里插入图片描述

3、模板的继承

  • 如下图所示,通常情况下,一个网站的顶部和底部,甚至有的侧边朗都是完全一样的,不同的仅仅是中间的内容部分,如果不使用继承,在每个页面都必须要做头部和尾部,这样带来一个问题就是如果头部或尾部需要修改,则所有页面都需要修改,这显然不符合常规做法
    在这里插入图片描述

  • 模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容,并可以覆盖覆膜板中的相应的块

  • 语法:父模板中

    • 定义父模板块block标签
    • 标识出哪些在子模块中是允许被修改的
    • block标签:在父模板中定义,可以在子模板中修改覆盖
  • 语法:子模板

    • 继承模板extends标签(写在模板文件的第一行)
      如:

       {% extends 'base.html' %}
      
    • 子模板重写父模板中的内容块

      {% block block_name %}
      子模板块用来覆盖父模板块中block_name块的内容
      {% endblock %}
      

实例:
设计如下三个路由:
在这里插入图片描述
视图函数实现如下三个函数

from django.shortcuts import render

def base_view(request):
    return render(request,"base.html")

def index1_view(request):
    return render(request,"index1.html")

def index2_view(request):
    return render(request,"index2.html")

在templates目录下创建base.html,index1.html,index2.html三个文件
base.html:定义了两个可以被继承修改的块,title和info

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {% block title %}
    <title>网站首页</title>
    {% endblock %}
</head>
<body>

<a href="/base_view">网站首页</a>
<a href="/index1_view">第一个index页面</a>
<a href="/index2_view">第二个index页面</a>

<br>

{% block info %}
这是主页
{% endblock %}

<br>

<h3>有问题请联系400000001</h3>

</body>
</html>

index1.html

{% extends "base.html" %}

{% block title %}
    <title>第一个index页面</title>
{% endblock %}

{% block info %}
<p>欢迎来到第一个index页面</p>
{% endblock %}

index2.html

{% extends "base.html" %}

{% block title %}
    <title>第2个index页面</title>
{% endblock %}

{% block info %}
<p>欢迎来到第二个index页面</p>
{% endblock %}

浏览器打开 http://127.0.0.1:8080/base_view,然后点击三个链接,可以看到不管切换到哪个网页,头部和底部都是不变的,只有中间正文以及页面名称才会发生改变
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 模板继承有一个点需要注意一下,当在父模板中使用了变量,那么当子父模板对应的视图函数传入变量值时,子模板对应的页面时拿不到此变量值的,同样,如果子模板的视图函数传入了此变量的值,那么也只能在此子模板对应的页面展示,父模板同样也是拿不到的,这个和编程语言的继承还是有一些区别的
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

redrose2100

您的鼓励是我最大的创作动力

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

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

打赏作者

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

抵扣说明:

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

余额充值