Django 模板过滤器
-
定义: 在变量输出时对变量的值进行处理
-
作用: 可以通过过滤器来改变变量的输出显示
-
语法: {{ 变量 | 过滤器1: '参数1' | 过滤器2: '参数2' ... }}
-
常用过滤器
过滤器 说明 lower 将字符串转换为全部小写 upper 将字符串转换为全部大写 safe 默认不对变量内的字符串进行HTML转义,传入HTML代码将会被执行 add:'n' 将 value 的值增加 n truncatechars: 'n' 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将可以翻译的省略号结尾
# app 中的 urls.py
from django.urls import path, re_path
from . import views
urlpatterns = [
path('test_filter', views.test_filter),
]
# app 中的 views.py
from django.template import loader
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
def test_filter(request):
name1 = 'admin'
name2 = 'ROOT'
num1 = 10
str_script = "<script>alert('hello world')</script>"
return render(request, 'test_filter.html', locals())
# app 中的 templates/test_filter.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试过滤器</title>
</head>
<body>
<h3>原变量: {{ name1 }}, upper后的变量值: {{ name1 | upper }}</h3>
<h3>原变量: {{ name2 }}, lower后的变量值: {{ name2 | lower }}</h3>
<h3>原变量: {{ num1 }}, add:'10'后的变量值: {{ num1 | add:'10' }}</h3>
<!--<h3>原变量: {{ str_script }}, safe后的变量值: {{ str_script | safe }}</h3>-->
<h3>原变量: {{ str_script }}</h3>
<h3>str_script safe后的变量值: {{ str_script | safe }}</h3>
</body>
</html>
模板的继承
-
模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并可以覆盖父模板中相应的块
-
语法:
- 定义父模板中的块block标签
- 标识出哪些在子模板中是允许被修改的
- block标签: 在父模板中定义,可以在子模板中覆盖
-
语法 - 子模板中:
-
继承模板 extends 标签(写在模板文件的第一行)
- 例如: {% extends 'base.html' %}
-
子模板重写父模板中的内容块
- {% block block_name %}
- 子模板中用来覆盖父模板中的 bolck_name 块中的内容
- {% endblock block_name %}
-
# app 中的 urls.py
from django.urls import path, re_path
from . import views
urlpatterns = [
path('base_index', views.base_view),
path('music_index', views.music_view),
path('sport_index', views.sport_view),
]
# app 中的 views.py
from django.template import loader
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
def base_view(request):
return render(request, 'base.html')
def music_view(request):
return render(request, 'music.html')
def sport_view(request):
return render(request, 'sport.html')
# app中的 templates/base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block mytitle %}
<title>首页</title>
{% endblock mytitle %}
</head>
<body>
{% block info %}
<h3>这是首页中的内容</h3>
{% endblock %}
<a href="/base_index">首页</a>
<a href="/music_index">音乐频道</a>
<a href="/sport_index">体育频道</a>
<br>
<h4>有问题请联系: xxxxxxxxxx</h4>
</body>
</html>
# app中的 templates/music.html
{% extends 'base.html' %}
{% block mytitle %}
<title>音乐频道</title>
{% endblock %}
{% block info %}
<h3>这是音乐频道的内容</h3>
{% endblock %}
# app中的 templates/sport.html
{% extends 'base.html' %}
{% block mytitle %}
<title>体育频道</title>
{% endblock %}
{% block info %}
<h3>这是体育频道的内容</h3>
{% endblock %}