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静态文件配置request对象方法ORM操作讲解

    下面是关于“Django静态文件配置request对象方法ORM操作讲解”的详细攻略讲解。 Django静态文件配置 在Django项目中,静态文件(例如CSS、JS、图片等)是必不可少的。Django提供了内置的静态文件管理器,为开发者提供了很多便捷的配置方法。 配置步骤 在settings.py文件中设置静态文件存放的目录。例如,存放在根目录下的stat…

    Django 2023年5月16日
    00
  • Django 创建新App及其常用命令的实现方法

    下面我将详细讲解“Django 创建新App及其常用命令的实现方法”这个话题。 1. 创建新 App 在 Django 中创建新的 App 可以使用 Django 自带的 startapp 命令。在终端中进入 Django 项目所在目录,并使用以下命令: python manage.py startapp app名 其中,“app名”是你所创建 App 的名…

    Django 2023年5月16日
    00
  • 用wfastcgi在IIS下部署Django&Flask

    Django跟Flask在Linux底下都可以很方便地以FastCGI模式部署,貌似IIS下面不很好配置,而且IIS也缺少一个像PHPmanager一样的全自动配置工具,在公司服务器上部署起来颇费周折,部署后总结起来过程倒也不复杂,主要是网上并没有给出一个完整的方案,这里记录一下方便大家使用 先来Django吧,在自己机器上简单开一个测试用网站,这里我用“C…

    Django 2023年4月16日
    00
  • django中的auth模块与admin后台管理方法

    下面是“django中的auth模块与admin后台管理方法”的完整攻略: Django中的auth模块 Django中的auth模块包含了用户验证、权限设置、密码重置等功能,是开发常用的模块之一。 创建用户 Django中可以通过auth模块的UserManager类创建用户。 示例代码: from django.contrib.auth.models i…

    Django 2023年5月16日
    00
  • django系列6–Ajax05 请求头ContentType, 使用Ajax上传文件

    ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 默认格式application/x-www-form-urlencoded 方…

    2023年4月9日
    00
  • django中itsdangerous的用法

     itsdangerous用来解决什么问题,为什么需要用到itsdangerous? 安装命令:pip install itsdangerous 有时候你想向不可信的环境发送一些数据,但如何安全完成这个任务呢?解决的方法就是签名。使用只有你自己知道的密钥,来加密签名你的数据,并把加密后的数据发给别人。当你取回数据时,你就可以确保没人篡改过这份数据。 诚然,接…

    Django 2023年4月10日
    00
  • Python的Django框架中TEMPLATES项的设置教程

    以下是关于“Python的Django框架中TEMPLATES项的设置教程”的完整攻略,内容包含两条示例说明: 1. 什么是 Django Templates? Django Templates 是 Django 框架中的模板引擎,用于构建网站的用户界面。 2. 如何在 Django 中设置 TEMPLATES? 在 Django 中,TEMPLATES 变…

    Django 2023年5月15日
    00
  • django 创建数据库的基本操作

    创建的时候 在app下的 models.py 文件下 ,注意 model.py 名字不能修改 使用mysql的童鞋,在django 默认使用的是 mysqldb, 但是,py3 里面没有,需要import pymysql。 以下的代码都是 views.py 中的代码, url自己做对应吧。 在 项目名的目录下 的__init__.py 文件中 ,写上如下代码…

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