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工程项目迁移到无网络环境

      已有环境 CentOS 7 Python 3.7 Django 2.1 主要用到下面三个命令: # 导出依赖 pip freeze > requirements.txt # 按照依赖下载离线包 pip download -d packagesDir -r requirements.txt # 安装离线包 whl包、tgz包 单个包、目录下的包 pi…

    Django 2023年4月10日
    00
  • Python – Django – 母版和继承

    可以把多个页面相同的部分提取出来,放在一个母板里,这些页面只需要继承这个母板就好了 通常会在母板中定义页面专用的 CSS 块和 JS 块,方便子页面替换 定义块: {% block 名字 %} {% endblock %} views.py 中添加函数: from django.shortcuts import render, redirect, HttpR…

    Django 2023年4月10日
    00
  • Apache上部署Django步骤详细介绍

    关于“Apache上部署Django步骤详细介绍”的攻略,我将给出以下完整的步骤,其中包含两条示例说明。 环境要求 在部署Django应用之前,需要确保已安装以下环境: Apache服务器 mod_wsgi 步骤一:创建Django项目 在部署Django应用前,首先需要先创建一个Django项目。可以使用django-admin工具创建一个名为myproj…

    Django 2023年5月15日
    00
  • django ngRoute ui-router 开发环境下禁用缓存

    问题描述: Python manage.py runserver ,禁用缓存,及时修改反馈到浏览器 解决办法: 使用dummy cache: Dummy caching (for development)¶ Finally, Django comes with a “dummy” cache that doesn’t actually cache – it …

    Django 2023年4月16日
    00
  • Django模板加载与响应

    Django模板的加载与响应方法: 加载模板 Django通过Template类来加载模板。在视图函数中,我们可以使用render()函数来渲染模板。最常用的方式是将模板名称和上下文字典传递给render()函数。 代码示例: from django.shortcuts import render def my_view(request): context …

    Django 2023年3月12日
    00
  • Django使用第三方模块django-password-reset重置密码

    网上关于django第三方模块django-password-reset重置密码的几篇博客有一个严重的bug 见博客:https://blog.csdn.net/qq_42820268/article/details/81940353 中的内容。 关键是:上文提到的urls.py配置, 出现错误,并提出解决办法,实际上并没有解决,应该写为:url(r’^pw…

    Django 2023年4月13日
    00
  • Django 的逆向解析url(转)

    Django中提供了一个关于URL的映射的解决方案,你可以做两个方向的使用:             1.有客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,                 获取相应的数据,然后返回给客户端显示              2.通过一个视图的名字,再加上一些参数和值,逆向获取相…

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

    配置后台管理 xadmin直接使用之前的在线教育的那个就可以了 users/adminx.py #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/9/19 下午 01:15 # @Author : gao # @File : adminx.py import xadmin from us…

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