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’:如果字符串字符多余指定的字符数量,那么会被截断,截断的字符串将以可翻译的省略号序列(…)结尾

实例:
设计路由如下:
Django(11)-模板层的过滤器和继承_第1张图片
视图函数如下:

from django.shortcuts import render

def test_filter(request):

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

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

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test_fortitle>
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的语法去解析
Django(11)-模板层的过滤器和继承_第2张图片

3、模板的继承

  • 如下图所示,通常情况下,一个网站的顶部和底部,甚至有的侧边朗都是完全一样的,不同的仅仅是中间的内容部分,如果不使用继承,在每个页面都必须要做头部和尾部,这样带来一个问题就是如果头部或尾部需要修改,则所有页面都需要修改,这显然不符合常规做法
    Django(11)-模板层的过滤器和继承_第3张图片

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

  • 语法:父模板中

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

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

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

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

实例:
设计如下三个路由:
Django(11)-模板层的过滤器和继承_第4张图片
视图函数实现如下三个函数

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>有问题请联系400000001h3>

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,然后点击三个链接,可以看到不管切换到哪个网页,头部和底部都是不变的,只有中间正文以及页面名称才会发生改变
Django(11)-模板层的过滤器和继承_第5张图片
Django(11)-模板层的过滤器和继承_第6张图片
Django(11)-模板层的过滤器和继承_第7张图片

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

你可能感兴趣的:(Django,python,django)