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

本文详细介绍了Django模板系统的组成部分,包括变量、标签、过滤器等,并解释了如何在模板中调用对象的方法及模板继承的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义模板

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 % }
    作用
        在输出中创建文本
        控制循环或逻辑
        加载外部信息到模板中供以后的变量使用
    ①for标签

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

    ②if标签

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

    ③comment标签

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

    ④include:加载模板并以标签内的参数渲染

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

    ⑤url:反向解析

{ % url 'name' p1 p2 %}

    ⑥csrf_token:这个标签用于跨站请求伪造保护

{ % csrf_token %}

    ⑦布尔标签:and、or,and比or的优先级高
    ⑧block、extends:详细描述在“模板继承”

5.过滤器
    语法:{ { 变量|过滤器 }},例如{ { name|lower }},表示将变量name的值变为小写输出
    使用管道符号 (|)来应用过滤器
    通过使用过滤器来改变变量的计算结果
    ①可以在if标签中使用过滤器结合运算符

if list1|length > 1

    ②过滤器能够被“串联”,构成过滤器链

name|lower|upper

   ③过滤器可以传递参数,参数使用引号包起来

list|join:", "

    ③default:如果一个变量没有被提供,或者值为false或空,则使用默认值,否则使用变量值

value|default  # 什么也没有

    ④date:根据给定格式对一个date变量格式化

value|date:'Y-m-d'

模板继承

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 %}

转载于:https://my.oschina.net/zhenfei/blog/1929804

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值