Django2.x - 模板过滤器

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 标签(写在模板文件的第一行)

      • 例如:
    • 子模板重写父模板中的内容块

      • 子模板中用来覆盖父模板中的 bolck_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 %}
posted @ 2021-07-15 20:50  苟住,别浪  阅读(32)  评论(0编辑  收藏  举报