详解Django模板层过滤器和继承的问题
详解Django模板层过滤器和继承的问题,恰卡网带你了解更多相关信息。
过滤器
模板层对变量的操作实际还有很多,过滤器就是其中一种。学过Linux系统的一定知道管道操作符,其可以将上一步输出直接作为下一步输入进行处理,这里的过滤器就是类似管道符,其写法也是以管道符|
为标志,允许我们对模板层获得的变量进行改变,例如大小写转换、增减大小等等
语法
{{ 变量|过滤器1|过滤器2:'值' |...}}
这里的过滤器可以分为两类,一类是不带参数的,例如lower,upper,safe
;一类是带参数的add:'10'
,冒号分隔,后面跟上值
过滤器 | 示例 | 说明 |
---|---|---|
lower | {{str | lower}} |
upper | {{str | upper}} |
safe | {{script | safe}} |
add | {{num | add:‘10'}} |
示例:
views.py
def home(request): dic = {} dic['str'] = 'abc' dic['num'] = 90 dic['script'] = '<script>alert("这是测试过滤器safe")</script>' #简单的js代码,可以弹出一个窗口 return render(request, 'home.html', dic)
home.html
<body> <h2>过滤器upper: {{ str|upper }}</h2> # 全变成大写字母 <h2>过滤器add: {{ num|add:'10' }}</h2> # 加10 <h2>过滤器safe: {{ script|safe }}</h2> # 不进行html转义,适用直接执行js代码,理解为代码安全可以直接执行 </body>
如果不适用safe
则输出原始字符串,不会执行js代码
除了以上过滤器,更多过滤器请参见https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins
继承
对于某个网站来说,一般又比较统一的风格,例如无论点击网页哪个标签或者链接,导航栏和尾部都是基本一样的内容,真正变的是中间的内容区域,如何才能让不同的网页有相同也有差异呢,django中对模板可以使用继承的概念。
例如,有如下页面,由三部分组成,第一块是导航栏,无论哪个子页面均是一样,中间body区会因为点击导航栏不同项目发生变化,而最后一块尾部每个页面都是一样,如何实现上述要求呢?
- 求同:Django模板层通过
{% extends 'home.html' %}
实现子页面对home.html的继承,也就是说只需要在每个子页面写上该行代码即能完成对父页面的继承,但是需要注意的是不能继承父页面的相关视图函数的变量 - 存异:在父页面(home.html)中使用
{% block block_name %}...{% endblock block_name(可选) %}
标记块,凡是在标记块中的内容在子页面都可以被修改,修改方法是在{% block block_name %}子页面重写内容{% endblock block_name(可选) %}
块中重新更改内容即可
home.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <!-- 导航栏,每个页面都一样 --> <h2> <a href="/home" rel="external nofollow" >主页</a> <a href="/music" rel="external nofollow" >音乐频道</a> <a href="/sport" rel="external nofollow" >运动频道</a> </h2> <h2> {% block body %} <h2>欢迎来到主页!(该部分区域因页面而异)</h2> {% endblock %} <h3>如有问题请请联系xxx@163.com(每个页面都一样)</h3> </body> </html>
music.html
{% extends 'home.html' %} <!-- 修改body区域内容 --> {% block body %} <h2>欢迎来到音乐频道!</h2> {% endblock %}
sport.html
{% extends 'home.html' %} <!-- 修改body区域内容 --> {% block body %} <h2>欢迎来到运动频道!</h2> {% endblock %}
views.py
import re from django.http import HttpResponse from django.shortcuts import render def home(request): return render(request, 'home.html', dic) def music(request): return render(request, 'music.html') def sport(request): return render(request, 'sport.html')
urls.py
from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('home/', views.home), path('music/', views.music), path('sport/', views.sport), ]
学到这里,大家又可以小激动一下了,一个静态网页的基本架构慢慢成熟起来,将一个主页应用到其他页面,同时又保持其他页面的差异,django的模板思想越来越清晰了。
到此这篇关于Django模板层过滤器和继承的文章就介绍到这了,更多相关Django模板层过滤器内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!
推荐阅读
-
洗衣机不脱水了是怎么回事(洗衣机不甩干的处理方法)
洗衣机作为大家日常生活必备的家用电器,其利用率频繁,难免会因为机械磨损、缺乏润滑油、机件老化、弹簧疲劳变形等原因,出现各种不正...
-
电子表格零基础自学教程(小白也能学明白)
可能很多人(包括我)觉得Excel不就是做个表吗,没什么好学的。然而很多大型企业在面试的时候还是会问,“会Excel吗?”“会...
-
笔记本电脑报价大全(联想笔记本多少钱)
(注意:建议在旗舰店、官方旗舰店、官网购买) 一、游戏本设计本、办公本推荐如下: 华为品牌:(全球第一大电信设备商) 1...
-
煲机软件哪个好(让耳机有个思想准备)
《无间道》中陈永仁与刘建明有过一句经典对白&mdash;&mdash;“高音甜、中音准、低音沉,总之一个词通透”。这一句话也一...
-
viewsonic平板电脑(viewsonic平板电脑刷机)
ViewSonic是一个视讯品牌,中文名字:优派。 ViewSonic 一、读音:英[vju:][?s?n?k],美[vj...
-
采访麦克风户外哪款好(讯飞智能无线麦克风C1采访神器)
对于视频创作者、直播工作者、远程培训老师、记者等媒体工作者来说,工作过程中,最让人费心的莫过于如何确保收音纯正、字幕快速生成、...
-
电脑硬件配置怎么查(详述两招快速查看电脑配置参数信息)
大家好,今天跟大家分享两个快速查看电脑配置参数信息的办法。 操作步骤如下: 1右击电脑屏幕最下方任务栏左侧的电脑徽标按钮,...
-
数据线没坏但充不上电怎么办(数据线充不上电处理方法)
苹果充电器突然充不上电是比较尴尬的问题,首先看自己的充电器数据线是不是原装,如果非原装在第一次充电时,苹果手机会提示你是否要适...
-
电脑开机出现黑屏如何处理(电脑不能开机黑屏解决方法)
电脑不能开机或者开机以后黑屏怎么解决?这里收集了所有常见的维修方法,看完秒变维修高手,实在是一篇不能错过的电脑维修教程。简单易...
-
手机宝典怎么搞(小米手机性能优化宝典)
别再总是抱怨手机卡顿,系统臃肿,反应慢,现在看完这篇文章,你会发现你并不了解小米手机,当然,文中许多方法并不是仅仅适用于小米手...