(五)模板标签、模板继承与引用

1.模板标签

定义:标签在渲染过程中提供任意的逻辑。
这个定义是刻意模糊的,例如,一个标签可以输出内容,作为控制结构,例如"if" 语句或"for"循环从数据库中提取内容,甚至可以访问其他的模板标签。
标签语法:由%}和{%来定义的,例如:{%tag%} {%endtag%}

1.if-else

{% if name == 'xiaoming' and age == 12 %}
     我是{{ name }}
{% elif name == "xiaozhang" %}
     我是{{ name }}
{% else %}
     我是马志量

{% endif %}

2.ifequal

{% ifequal  name 'xiaoming'%}
    我是{{ name }}
{% endifequal %}

3.for

{% for foo in list %}
    <li>{{ foo}}</li>
{% endfor %}

4.forloop
forloop.counter 当前迭代的次数,下标从1开始,1,2,3
forloop.counter0 当前迭代的次数,下标冲0开始,0,1,2
forloop.revcounter 跟forloop.counter 一样,下标从大到小。3,2,1,先把列表值反序,在取值。
forloop.revcounter0 跟forloop.counter0 一样,下标从大到小。2,1,0,先把列表值反序,在取值。
forloop.first 返回bool类型,如果是第一次迭代,返回True,否则返回False
forloop.last 返回bool类型,如果是最后一次迭代,返回True,否则返回False
forloop.parentloop 如果发生多层for循环嵌套,那么这个变量返回的是上一层的for

5.for in empty
如果没有数据,跳转到empty中

{% for foo in aa %}
    {{ foo }}
    {% empty %}
        aaa
{% endfor %}

6.url

<a href="/book/index">跳转一</a><br>
<a href="{%  url 'test_index' %}">跳转二</a>
path('index/',views.index,name='test_index'),

跳转一种 ,index是自定义的路由路径。
跳转二中,test_index是定义的name属性值。

7.with
缓存一个变量

{% with name as aaa %}
   {{ aaa}}
{%endwith%}

8.autoescape
开启和关闭自动转义

{% autoescape off %}
    {{ tag }}
    {{ tag }}
    {{ tag }}
    {{ tag }}
{% endautoescape %}

2.模板的继承与引用

Django模板引擎中最大也是最复杂的部分就是模板继承了。模板继承可以让你创建一个基本的“骨架”模板,它包含您站点中的全部元素,并且可以定义能够被子模板覆盖的block。

2.1模板继承


base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}这是要继承的模板{% endblock %}</title>
</head>
<body>
头部------------------<br><br><br><br>
{% block center%}中间------------------{% endblock %}<br><br><br><br>
尾部------------------<br><br><br><br>
</body>
</html>

test1.html去继承base.html

{% extends 'book/base.html' %}

{% block center %}
    test1自己的内容
{% endblock %}

{% block title %}
    test1
{% endblock %}

在这里插入图片描述

模板继承总结:
模板继承使用extends标签实现。通过使用block来给子模板开放接口。
1.extends必须是模板中的第一个出现的标签,
2.子模板中的所有内容,必须出现在父模板定义好的blokc中,否则django将不会渲染。
3.如果出现重复代码,就应该考虑模板。
4.尽可能多的定义block,方便子模板实现更细的需求。
5.如果在某个block中,要使用父模板的内容,使用block.super获取。

{{ block.super }}

也可以去改父模板中的样式

base.html

p标签中的字体在base.html中是红色

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}这是要继承的模板{% endblock %}</title>
    <style>
        {% block p %}
        p{
            color: red;
        }
        {% endblock %}
    </style>
</head>
<body>
<p>能改样式吗?</p>

头部------------------<br><br><br><br>
{% block center%}中间------------------{% endblock %}<br><br><br><br>
尾部------------------<br><br><br><br>

</body>
</html>

test1.html继承时,改下字体颜色。

{% block p %}
 p{
    color:aqua;
    }
{% endblock %}

在这里插入图片描述

2.2模板引用

使用include引用

test2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test2</title>
</head>
<body>
 我是xiaoming
</body>
</html>

test1.html

{% extends 'book/base.html' %}
{% block center %}
    {{ block.super }}
    test1自己的内容<br>
这是引用的test2.html<br>
{% include 'book/test2.html' %}
{% endblock %}

{% block title %}
    test1
{% endblock %}

{% block p %}
 p{
    color:aqua;
    }
{% endblock %}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薄衫啊

三克油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值