Django框架之模版继承、模版加载include

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

模板继承

关于模板,经常重复的编写页面是一个非常痛苦的事情;

那么在django中也提供了一种非常舒服方便的方法,可以使新的模板页面来继承自一个已编写好的html页面实现复用,免去重复工作;这就是模板继承

block

页面的继承不能说全部都拿过来,有时候只需要已经编写好的页面某些部分;其他部分提前挖好一些坑,去填充不同内容

挖坑可以通过模板中的{% block %}标签

{% block name %}
	预留区域,可供未来继承的页面覆盖
{% endblock name %}

设计一个可以被继承的父模板,我们经常叫做base.html

<!DOCTYPE html>
<html>

<head>
    <title>
        {% block title %}
        父模板标题
        {% endblock title %}
    </title>
</head>

<body>
    {% block top %}
        <h3>父模板</h3>
    {% endblock top %}

    {% block content %}
        <div>这里是父模板页面内容</div>
    {% endblock content %} </body>
</html>

在这个页面中,我们设计了三个block标签块titlecontent以及top

每一个块都可以被之后继承的页面所覆盖新的内容

  • 继承页面使用{% extends "base.html" %}标签进行页面的继承,现在编写一个test.html
{% extends "base.html" %}

{% block title %}
    子模版
{% endblock title %}

{% block top %}
    <h3>子模板</h3>
{% endblock top %}

{% block content %}
    <p>我是子模版</p>
{% endblock content %} </body>

{% block other %}
    哈哈哈哈哈
    这里的内容不会显示
    父模板并没有这样的block块
{% endblock other%}

除了对应block标签内容被子模板修改,其余内容均默认使用父模板中的

  • 注意:
    • 如果父模板内有模板变量或者其他上下文数据,不会被子模板继承,但是子模板可以为父模板内的模板数据赋值
    • 如果需模板中具有模板变量等上下文数据,只有放到block标签块内数据才会显示
    • 子模板中修改父模板中并不存在的block块,子模板不会显示

模板加载

除了{% extends %}{% block %}结合的方式可以继承一个父模板

我们还可以使用{% include %}一个新的标签进行模板加载,include标签使用语法与extends类似

include

现在新建一个html文件,名为li.html,用来写一个简单的列表

<ul>
    <li>吃饭</li>
    <li>睡觉</li>
    <li>玩耍</li>
    <li>{
   
   { var }}</li>
</ul>

在需要导入的页面中使用{% include "li.html" %}进行引入

{% extends "base.html" %}

{% block title %}
    子模版
{% endblock title %}

{% block top %}
    <h3>子模板</h3>
{% endblock top %}

{% block content %}
    <p>我是子模版</p>
    {% include "li.html" %}
{% endblock content %} </body>

include引入的新模板,会在渲染完成之后添加到父模板所给定的对应block块中

extends不同,extends常用来控制整个模板的样式和效果;而include更加细化,可以在一个模板内包含其他多个模板

如果include所包含的模板页面中有模板变量需要被填充,会在包含include的页面下进行渲染;这种行为也好像是,把一个新的渲染好的html页面嵌入了进来一样

おすすめ

転載: blog.csdn.net/HeroicLee/article/details/121361928