6-Django模板层--过滤器和继承

本文详细介绍了Django模板层的过滤器和模板继承功能。模板过滤器用于在变量输出时改变其显示,如`lower`和`upper`用于大小写转换,`add`进行数值加法,`truncatechars`进行字符串截断等。同时,通过模板继承实现页面内容的复用,子模板可以覆盖父模板的`block`内容,提高代码效率。案例展示了如何在实际项目中应用这些概念。
摘要由CSDN通过智能技术生成

本节介绍Django模板层的过滤器和模板继承。

1、模板过滤器

定义:在变量输出时对变量的值进行处理
作用:可以通过使用过滤器来改变变量的输出显示
语法:{{变量 | 过滤器1:’参数值1‘ | 过滤器2:’参数值2‘…}}
官方文档
https://docs.djangoproject.com/en/2.2/ref/templates/builtins/
常用过滤器

过滤器说明
lower将字符串转换为全部小写
upper将字符串转换为大写形式
safe默认不对变量内的字符串进行HTML转义
add: “n”将value的值增加n
truncatechars:‘n’如果字符串多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(”…“)结尾

案例
在之前的test_html_param.html进行改造
templates/test_html_param.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h3>int 是 {{ int | add:'2'}}</h3>
<h3>str 是 {{ str | upper}}</h3>
<h3>list 是 {{ list }}</h3>
<h3>list[0] 是 {{ list.0 }}</h3>
<h3>dict 是 {{ dict }}</h3>
<h3>dict['a'] 是 {{ dict.a }}</h3>
<h3>function 是 {{ func }}</h3>
<h3>class_obj 是 {{ class_obj.say }}</h3>
<h3>script 是 {{ script | safe }}</h3>

</body>
</html>

views.py

def test_html_param(request):
    dic = {}
    dic['int'] = 88
    dic['str'] = 'guoxiaomao'
    dic['list'] = ['Tom', 'Jack', 'Lily']
    dic['dict'] = {'a': 9, 'b': 8}
    dic['func'] = say_hi  # 注意传递函数不要加(),加上()相当于把函数的执行结果赋值给func
    dic['class_obj'] = Dog()
    dic['script'] = '<script>alert(1111)</script>'  

    return render(request, 'test_html_param.html', dic)

urls.py

    path('test_html_param', views.test_html_param),

启动项目,浏览器输入http://127.0.0.1:8000/test_html_param,查看效果

2、模板的继承

模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并可以覆盖父模板中相应的块。
在这里插入图片描述
语法-- 父模板中

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

重写的覆盖规则:
不重写,将按照父模板的效果显示
重写,则按照重写效果显示

注意:
模板继承时,服务器端的动态内容无法继承

案例:
定义3个页面,base.html作为主页, music.html, sport.html 继承base.html页面。
base.html

标签允许修改,所以用block标签进行标注; 中间的info 内容也可以被子模板修改,也用block标签标注;
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {% block mytitle %}
    <title>主页</title>
    {% endblock %}
</head>
<body>
{{ lst }}   <!--父模板中的传值不会被子模板继承-->
<a href="/music_index">音乐频道</a>
<a href="/sport_index">体育频道</a>
<br>

{% block info %}
    这是主页
{% endblock %}
<br>

<h3>有任何问题联系。。。。。</h3>

</body>
</html>

子模板 music.html

{% extends 'base.html' %}  <!--继承父模板base.html-->

{% block mytitle %}
    <title>音乐频道</title>    <!--修改父模板title-->
{% endblock %}

{% block info %}
    欢迎来到音乐频道          <!--修改父模板info-->
{% endblock %}

子模板sport.html

{% extends 'base.html' %}

{% block mytitle %}
    <title>体育频道</title>
{% endblock %}

{% block info %}
    欢迎来到体育频道
{% endblock %}

views.py

def base_view(request):
    lst = ['tom','jack']  # 父模板中的传值
    return render(request, 'base.html',locals())
    
def music_view(request):
    return render(request, 'music.html')

def sport_view(request):
    return render(request, 'sport.html')

urls.py

    path('base_index', views.base_view),
    path('music_index', views.music_view),
    path('sport_index', views.sport_view),

启动项目运行,浏览器输入:http://127.0.0.1:8000/base_index
在这里插入图片描述
输入:http://127.0.0.1:8000/music_index
在这里插入图片描述
输入:http://127.0.0.1:8000/sport_index
在这里插入图片描述
下一篇:Django-URL反向解析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值