Django 模板的导入与继承

文章目录

    • 模板的导入和继承
    • 1、模板的导入之include标签
    • 2、模板的继承\派生之extends标签、block标签
    • 注意事项:

模板的导入和继承

在实际开发中,模板文件彼此之间可能会有大量冗余代码,为此django提供了专门的语法来解决这个问题,主要围绕三种标签的使用:include标签、extends标签、block标签,详解如下

1、模板的导入之include标签

功能类似于inclusion_tag,但是没有inclusion_tag灵活好用

{% include '模版名称' %}

案例:

可以把广告栏写到专门的文件里advertise.html

<div class="adv">
    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title">Panel titleh3>
        div>
        <div class="panel-body">
            Panel content
        div>
    div>
    <div class="panel panel-danger">
        <div class="panel-heading">
            <h3 class="panel-title">Panel titleh3>
        div>
        <div class="panel-body">
            Panel content
        div>
    div>
    <div class="panel panel-warning">
        <div class="panel-heading">
            <h3 class="panel-title">Panel titleh3>
        div>
        <div class="panel-body">
            Panel content
        div>
    div>
div>

然后在base.html文件中用include标签引入advertise.html文件的内容

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
  {% include "advertise.html" %}
body>
html>

注意:include导入,会将 html 文件内的所有内容全部导入,所以对于被导入的文件,不能是一个完整的 html 文件,不然导入文件之后,一个 html 文件可能出现两个标签

2、模板的继承\派生之extends标签、block标签

extends可以搭配一个block标签,用于在继承的基础上定制新的内容

我们以先创建一个基本的“骨架”模版,它包含我们站点中的全部元素,并且可以定义多处blocks ,例如我们创建base.html内容如下

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>
        {% block title %}自定义title名{% endblock %}
    title>
head>
<body>
  <div>
    {% block sidebar %}
    	<a href="#" class="list-group-item active">服装城a>
    	<a href="#" class="list-group-item">美妆馆a>
    	<a href="#" class="list-group-item">超市a>
    	<a href="#" class="list-group-item">全球购a>
    	<a href="#" class="list-group-item">闪购a>
    	<a href="#" class="list-group-item">团购a>
    {% endblock %}
  div>

  <div >
    {% block content %}
    		base.html页面内容
    {% endblock %}
  div>

body>
html>

模板base.html 定义了一个可以用于两列排版页面的简单HTML骨架。我们新建子模板index.html的主要工作就是继承base.html然后填充/覆盖其内部的blocks

{% extends "base.html" %}


{% block title %}
    index页面
{% endblock %}


{% block sidebar %}
    
    {{ block.super }}

    
    <a href="#" class="list-group-item">拍卖a>
    <a href="#" class="list-group-item">金融a>
{% endblock %}

{% block content %}
    
    <p>index页面内容p>
{% endblock %}

注意事项:

1、标签extends必须放在首行,base.html中block越多可定制性越强

2、include仅仅只是完全引用其他模板文件,而extends却可以搭配block在引用的基础上进行扩写

3、变量{{ block.super }} 可以重用父类的内容,然后在父类基础上增加新内容,而不是完全覆盖

4、为了提升可读性,我们可以给标签{% endblock %} 起一个名字

例如: {% block content %} … {% endblock content %}

5、在一个模版中不能出现重名的block标签

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