蒋振飞的博客 - Django框架08:模板定义与继承   
正在加载蒋振飞的博客...
V3.0
蒋振飞的博客

Django框架08:模板定义与继承

发布时间: 2018年07月14日 发布人: 蒋振飞 热度: 447 ℃ 评论数: 0

一、定义模板

1.模板语言

    ①变量。
    ②标签 { % 代码块 % }。
    ③过滤器。
    ④注释{# 代码或html #}。

2.变量

    语法:

{{ variable }}

    ①当模版引擎遇到一个变量,将计算这个变量,然后将结果输出。
    ②变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。
    ③当模版引擎遇到点("."),会按照下列顺序查询:
        字典查询,例如:foo["bar"]。
        属性或方法查询,例如:foo.bar。
        数字索引查询,例如:foo[bar]。
    ④如果变量不存在, 模版系统将插入(空字符串)。
    ⑤在模板中调用方法时不能传递参数。

3.在模板中调用对象的方法

    ①在models.py中定义类BlogInfo。

from django.db import models

class BlogInfo(models.Model):
     ...
    def showName(self):
        return self.hname

   ②在views.py中传递BlogInfo对象。

from django.shortcuts import render
from models import *

def index(request):
    hero = HeroInfo(hname='abc')
    context = {'hero': hero}
    return render(request, 'temtest/detail.html', context)

    ③在模板detail.html中调用。

{{hero.showName}}

4.标签

    语法:{ % tag % }。
    作用:
        在输出中创建文本。
        控制循环或逻辑。
        加载外部信息到模板中供以后的变量使用。

    1) for标签

{ %for ... in ...%}
    # 循环逻辑
{{forloop.counter}} # 表示当前是第几次循环
{ %empty%}
    # 给出的列表为或列表不存在时,执行此处
{ %endfor%}

    2) if标签

{ %if ...%}
    # 逻辑1
{ %elif ...%}
    # 逻辑2
{ %else%}
    # 逻辑3
{ %endif%}

    3) comment标签

{ % comment % }
    # 多行注释
{ % endcomment % }

    4) include

        加载模板并以标签内的参数渲染。

{ % include "foo/bar.html" % }

    5) url

        反向解析。

{ % url 'name' p1 p2 %}

    6) csrf_token

        这个标签用于跨站请求伪造保护。

{ % csrf_token %}

    7) 布尔标签

        and、or,and比or的优先级高。
    8) block、extends

        详细描述在模板继承。

二、常用过滤器

1.capfirst

    把第一个字母改为大写。

{{value|capfirst}}

2.center,ljust,rjust

    把字符串的内容居中,靠左,靠右对齐。

{{value|center:'12'}}

3.cut

    把字符串中指定的字符删除。

{{value|cut:''}}

4.date

    指定日期时间的输出格式。

{{value|date:'d M Y'}}

5.linebreaksbr

    置换\n成为<br/>。

{{value|linebreaksbr}}

6.linenumbers

    为每一行字符串加上行号。

{{value|linenumbers}}

7.lower

    把字符串转换为小写。

{{value|lower}}

8.random

    把前面串行元素使用随机的方式任选一个输出。

{{value|random}}

9.striptags

    把所以的HTML标记全部删除。

{{value|striptags}}

10.truncatechars

    提取指定字数的字符。

{{value|truncatechars:120}}

11.upper    

    把字符串转为大写。

{{value|upper}}

12.wordcount

    计算字数。

{{value|wordcount}}

13.addslashes

    为字符串需要的地方加上转义字符。

{{value|addslashes}}

14.default

    如果没有值,就使用默认值。

{{value|default:'没有信息'}}

15.dictsort

    为字典形式内容的变量排列顺序。

{{value|distort:'name'}}

16.dictsortreversed

    上一指令的反向顺序。

17.divisibleby

    测试数值数据是否可被指定的数整除。

{{value|divisibleby:5}}

18.escape

    把字符串中的HTML标记变成显示用的字符串。

[{value|escape}}

19.filesizeformat

    以人们习惯的方式显示文件大小的格式(KB,MB)。

{{value|filesizeformat}}

20.first,last

    只取出列表数据的第一个,最后一个。

{{value|first}}

21.length

    返回列表数据的长度。

{{value|length}}

22.length_is

    测试数据是否为指定长度。

{{value|length_is:"3"}}

23.floatformat

    以指定的浮点数格式显示数据。

{value|floatformat:3}}

24.linebreaks

    将文字内容的换行符号转换为HTML的<br>和<p>。

{{value|linebreaks}}

25.safe

    标记字符串为安全的,不需要再处理转义字符。

{{value|safe}}

26.slugify

    把前面的字符串空格变成'-',让此字符串可以安全地放在网址上。

{{value|slugify}}

三、模板继承

1.模板继承   

    ①模板继承可以减少页面内容的重复定义,实现页面内容的重用。
    ②典型应用:网站的头部、尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义。
    ③block标签:在父模板中预留区域,在子模板中填充。
    ④extends继承:继承,写在模板文件的第一行。
    ⑤定义父模板base.html。

{ %block block_name%}
    # 这里可以定义默认值
    # 如果不定义默认值,则表示空字符串
{ %endblock%}

    ⑥定义子模板index.html。

{ % extends "base.html" %}
    # 在子模板中使用block填充预留区域
{ %block block_name%}
    # 实际填充内容
{ %endblock%}

2.说明

    ①如果在模版中使用extends标签,它必须是模版中的第一个标签。
    ②不能在一个模版中定义多个相同名字的block标签。
    ③子模版不必定义全部父模版中的blocks,如果子模版没有定义block,则使用了父模版中的默认值。
    ④如果发现在模板中大量的复制内容,那就应该把内容移动到父模板中。
    ⑤使用可以获取父模板中block的内容。
    ⑥为了更好的可读性,可以给endblock标签一个名字。

{ % block block_name %}
    # 区域内容
{ % endblock block_name %}

打赏 蒋振飞

取消

感谢您的支持,我会继续努力的!

扫码支持
一分也是爱     一块不嫌多

点击 支付宝 或 微信 打赏蒋振飞

打开支付宝扫一扫,即可进行扫码打赏哦

评论列表