Python Django 母版和继承解析

Python Django 母版和继承解析

母版是 Django 中非常重要的一部分,它可以让我们在不同页面之间共享通用的 HTML 结构或功能。母版还可以作为其他模板的基础,减少重复代码并提高开发效率。本文将详细介绍如何使用 Django 中的母版和继承。

创建母版

在 Django 中,创建母版通常是通过创建一个基本的 HTML 模板,将其中重复的、通用的部分放到头部 (head) 和底部 (footer) 之间进行编写。接下来,我们将创建一个简单的母版示例,其中包含了 Bootstrap 框架和网站的导航栏、页脚等元素。

<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}My Website{% endblock %}</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
          integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T"
          crossorigin="anonymous">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
    <a class="navbar-brand" href="#">My Website</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
            aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarNav">
        <ul class="navbar-nav">
            <li class="nav-item active">
                <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
</nav>
{% block content %}{% endblock %}
<hr>
<footer>
    <p>&copy; 2021 My Website. All rights reserved.</p>
</footer>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
        integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
        crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
        integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHFCNhG5"
        crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
        integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
        crossorigin="anonymous"></script>
</body>
</html>

在上面的代码中,我们使用了 Bootstrap 框架进行网站的布局,同时定义了 {% block %} 模板标签,以便在其他模板中填入相应的内容。注意,{ % block title % } 是一个默认值,可以在子模板中被覆盖。

继承母版

在创建了母版之后,我们可以通过继承母版的方式创建其他的视图。接下来我们将介绍如何通过继承母版创建一个简单的视图。

<!-- templates/index.html -->
{% extends 'base.html' %}
{% block title %}Index{% endblock %}
{% block content %}
    <h1>Welcome to my website!</h1>
    <p>This is the home page.</p>
{% endblock %}

在上面的代码中,我们使用了 {% extends 'base.html' %} 来继承母版,并在 {% block title %}{% block content %} 中填写了特定的内容。此时,我们创建的 index.html 就是继承自母版的子模板。

示例二: 更加复杂的继承

在示例二中,我们将介绍如何通过继承母版来创建更加复杂的视图。我们将创建一个包含二级导航栏和两个侧边栏的页面模板。

<!-- templates/layout.html -->
{% extends 'base.html' %}
{% block content %}
    <div class="container-fluid">
        <div class="row">
            <div class="col-sm-3">
                {% block left_sidebar %}
                    <h3>Left Sidebar</h3>
                {% endblock %}
            </div>
            <div class="col-sm-6">
                <div class="row">
                    <div class="col-sm-12">
                        {% block top_nav %}
                            <nav class="navbar navbar-light bg-light">
                                <ul class="navbar-nav">
                                    <li class="nav-item">
                                        <a class="nav-link" href="#">Nav item 1</a>
                                    </li>
                                    <li class="nav-item">
                                        <a class="nav-link" href="#">Nav item 2</a>
                                    </li>
                                    <li class="nav-item">
                                        <a class="nav-link" href="#">Nav item 3</a>
                                    </li>
                                </ul>
                            </nav>
                        {% endblock %}
                    </div>
                    <div class="col-sm-12">
                        {% block main_content %}
                            <h1>Welcome to my website!</h1>
                            <p>This is the home page.</p>
                        {% endblock %}
                    </div>
                </div>
            </div>
            <div class="col-sm-3">
                {% block right_sidebar %}
                    <h3>Right Sidebar</h3>
                {% endblock %}
            </div>
        </div>
    </div>
{% endblock %}

在这个示例中,我们创建了一个名为 layout.html 的中间模板,继承自 base.html,并在其中定义了多个 {% block %} 标签,以供其他继承自它的模板进行填充。

下面是另一个继承自 layout.html 的示例:

<!-- templates/my_page.html -->
{% extends 'layout.html' %}
{% block top_nav %}
    {{ block.super }}
    <li class="nav-item">
        <a class="nav-link" href="#">My Page</a>
    </li>
{% endblock %}
{% block left_sidebar %}
    {{ block.super }}
    <ul class="list-group">
        <li class="list-group-item"><a href="#">Link 1</a></li>
        <li class="list-group-item"><a href="#">Link 2</a></li>
        <li class="list-group-item"><a href="#">Link 3</a></li>
        <li class="list-group-item"><a href="#">Link 4</a></li>
    </ul>
{% endblock %}
{% block right_sidebar %}
    {{ block.super }}
    <ul class="list-group">
        <li class="list-group-item"><a href="#">Link 5</a></li>
        <li class="list-group-item"><a href="#">Link 6</a></li>
        <li class="list-group-item"><a href="#">Link 7</a></li>
        <li class="list-group-item"><a href="#">Link 8</a></li>
    </ul>
{% endblock %}
{% block main_content %}
    {{ block.super }}
    <p>This is my page content.</p>
{% endblock %}

在这个示例中,我们创建了一个名为 my_page.html 的模板,继承自 layout.html。在这个模板中我们通过使用 {{ block.super }} 填充了继承自 layout.html 的各个 {% block %}。同时,我们在 top_navleft_sidebarright_sidebarmain_content 中填写了特定的内容,实现了页面的不同效果。

通过这两个示例,我们可以深入学习 Django 中的母版和继承。母版和继承是 Django 中非常重要的一部分,它们可以让我们有效地管理、复用和组织代码,提高开发效率,增强代码的可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Django 母版和继承解析 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 如何使用Django默认的Auth权限管理系统

    下面是如何使用Django默认的Auth权限管理系统的完整攻略: 1. 创建Django项目并配置 首先,需要创建一个Django项目。打开终端或命令行工具,进入想要创建项目的目录,输入以下命令: django-admin startproject myproject 这将创建一个名为“myproject”的Django项目。接下来,需要配置Django权限…

    Django 2023年5月16日
    00
  • Django Rest Framework实现身份认证源码详解

    我来详细讲解一下“Django Rest Framework实现身份认证源码详解”的完整攻略,下面我们将分为以下几个部分: 介绍Django Rest Framework身份认证的基本原理 详细讲解Django Rest Framework中使用基于Token的身份认证 详细讲解Django Rest Framework中使用基于Session的身份认证 1…

    Django 2023年5月16日
    00
  • Django的ORM常用查找操作总结

    作者:python技术人博客:https://www.cnblogs.com/lpdeboke/ class UserModel(models.Model): u_name = models.CharField(max_length=16, unique=True) u_password = models.CharField(max_length=256) …

    Django 2023年4月12日
    00
  • Django+Vue打造购物网站(四)

    首页商品类别数据显示 商品分类接口 大概需要两个,一个显示三个类别 一个显示类别及类别下的全部商品 现在开始写商品的接口首先编写三个分类的serializer class CategorySerializer3(serializers.ModelSerializer): ”’ 三级分类 ”’ class Meta: model = GoodsCatego…

    2023年4月9日
    00
  • 用django框架开发一个B2C购物网站用户注册知识点总结2

    一:用户部分: 用户注册: 用户注册序列化器: 1 import re 2 3 from django_redis import get_redis_connection 4 from rest_framework import serializers 5 6 from users.models import User 7 8 9 class CreateU…

    Django 2023年4月16日
    00
  • Django Setting文件配置和简单的创建数据库字段

    Django Settings文件配置 静态文件配置 STATIC_URL = ‘/static/’ # 静态文件配置 STATICFILES_DIRS = [ os.path.join(BASE_DIR,’static’) ] # 暴露给外界能够访问服务器静态文件夹下面所有的资源 STATIC_URL = ‘/xxx/’ # 接口前缀 跟你的静态文件夹的名…

    Django 2023年4月12日
    00
  • Django如何批量创建Model

    首先,我们需要明确批量创建Model的场景。一般情况下,需要批量创建Model的场景比较罕见,因为Model用于描述一个数据表,每个表都有自己独立的结构和字段,不同的表之间极少会存在字段完全一致的情况。不过,在某些特殊情况下,可能需要针对一种特定的数据格式,创建多个具有相似结构的表,这时批量创建Model就派上用场了。 假设我们有一个需求,需要创建10个具有…

    Django 2023年5月16日
    00
  • django之常用命令详解

    下面是对 “django之常用命令详解” 的详细讲解以及两条示例说明。 Django之常用命令详解 在使用 Django 进行开发时,有一些通用的命令是必须要掌握的。下面就详细说明这些 Django 常用命令及其使用方法。 创建一个新的 Django 项目 要创建一个基本的 Django 项目,只需要运行以下命令: django-admin startpro…

    Django 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部