【Django 网页Web开发】06. 模板继承的主题导航栏案例 高效开发 便捷维护(保姆级图文)

news2024/10/6 20:40:46

目录

    • 实现效果
    • 模板继承
    • moban.html 模板页面
    • 子页面
      • test1.html
      • test2.html
    • url.py
    • view.py
    • 常见格式
    • 总结


欢迎关注 『Django 网页Web开发』 系列,持续更新中
欢迎关注 『Django 网页Web开发』 系列,持续更新中

实现效果

  • 很多页面都有导航栏,以CSDN为例子,我们在开发时虽然可以在每一个html页面模板中cv复制黏贴同一份导航栏代码,但是代码冗余不说,也难以维护(修改一次就要给所有的页面都修改一次)
  • 模板继承主要作用是让我们的所有页面复用共同的代码,也可以是共同调用的静态文件(js png 等内容)
    在这里插入图片描述

模板继承

在这里插入图片描述

首先确定我们的页面框架。
问几个问题:

  1. 是不是每个html页面都需要写一遍调用js和插件的代码?
  2. 页面有没有公共部分可能需要代码复用?
  3. 我们是不是需要一个标题导航栏部分?
    解决办法:
  • 建立一个公共的标题导航栏页面layout.html,写入每个页面都需要调用的静态文件,其他页面只需要调用这个公共的页面作为自身的一部分即可。既能代码复用也能创造出一片公共区域。

  • 其他页面调用公共页面的方法,实现模板继承,其他页面的编写内容只是模板的block content部分的内容

  • 模板页面尾部添加

<div>
    {% block content %}{% endblock %}
</div>
  • 子页面头部添加
{% extends 'layout.html' %}
  • 子页面尾部添加
{% endblock %}

moban.html 模板页面

下面引用了jquery-3.6.0和bootstrap-3.4.1,也用了bootstrap-3.4.1的部分组件

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
</head>
<body>
<a class="navbar-brand" href="/depart/list/">我是模板导航栏 </a>
<div>
    {% block content %}{% endblock %}
</div>

{#导入jquery和bootstrap,注意要先导入js再导入jquery,顺序的问题#}
<script src="{% static 'js/jquery-3.6.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
</html>

子页面

test1.html

{% extends 'moban.html' %}
{% block content %}
    {#  下方编写本页面的内容  #}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>页面1</title>
    </head>
    <body>
    <h1>页面1的 h1. Bootstrap heading</h1>

    <nav aria-label="Page navigation">
        <ul class="pagination">
            <li>
                <a href="#" aria-label="Previous">
                    <span aria-hidden="true">&laquo;</span>
                </a>
            </li>
            <li><a href="#">1</a></li>
            <li><a href="#">2</a></li>
            <li><a href="#">3</a></li>
            <li><a href="#">4</a></li>
            <li><a href="#">5</a></li>
            <li>
                <a href="#" aria-label="Next">
                    <span aria-hidden="true">&raquo;</span>
                </a>
            </li>
        </ul>
    </nav>
    </body>
    </html>
{% endblock %}

在这里插入图片描述

test2.html

{% extends 'moban.html' %}
{% block content %}
    {#  下方编写本页面的内容  #}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>页面1</title>
    </head>
    <body>
    <h2>页面2的 h2. Bootstrap heading</h2>

    <a class="btn btn-default" href="#" role="button">Link</a>
    <button class="btn btn-default" type="submit">Button</button>
    <input class="btn btn-default" type="button" value="Input">
    <input class="btn btn-default" type="submit" value="Submit">

    </body>
    </html>
{% endblock %}

在这里插入图片描述


url.py

from django.urls import path

from app01 import views

urlpatterns = [

    path('test1/', views.test1),
    path('test2/', views.test2),
]


view.py

from django.shortcuts import render, redirect

from app01 import models


def test1(request):
    return render(request, "test1.html")


def test2(request):
    return render(request, "test2.html")

常见格式

定义目版:layout.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugin...min.css' %}">
    {% block css %}{% endblock %}
</head>
<body>
    <h1>标题</h1>
    <div>
        {% block content %}{% endblock %}
    </div>
    <h1>底部</h1>
    
    <script src="{% static 'js/jquery-3.6.0.min.js' %}"></script>
    {% block js %}{% endblock %}
</body>
</html>

继承母版:

{% extends 'layout.html' %}

{% block css %}
	<link rel="stylesheet" href="{% static 'pluxxx.css' %}">
	<style>
		...
	</style>
{% endblock %}


{% block content %}
    <h1>首页</h1>
{% endblock %}


{% block js %}
	<script src="{% static 'js/jqxxxin.js' %}"></script>
{% endblock %}

总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python 网页Web开发知识!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『Django 网页Web开发』 系列,持续更新中
欢迎关注 『Django 网页Web开发』 系列,持续更新中
【更多内容敬请期待】


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAD绘制等分点(定距、定数)

练习用CAD绘制等分点 分成两种&#xff0c;分别为定距分点和定数分点 前者指按照一定的距离在给出的线上绘制等分点 后者将已知的线分为确定的份数&#xff0c;绘制等分点 这里用绘制燃气灶的燃气孔为例&#xff1a; 首先绘制两个长方形作为基础 生成中心线作为参考 使用时…

视频网页前端禁止截屏代码实现js

有言在先 原理是采用商业级DRM实现&#xff0c;DRM 许可证费用目前没有免费服务商&#xff0c;腾讯云价格是0.0056元/次。 另外此功能不兼容安卓&#xff0c;安卓系统无法正常播放视频&#xff01; 先展示效果 可以看到截屏时刻出现黑屏&#xff0c;录屏也能保证全黑状态。…

独立站的Facebook运营策略探索

Facebook广告是独立站吸引流量和推广业务的重要工具。然而&#xff0c;如何有效地运用Facebook广告&#xff0c;提高曝光率、点击率和转化率&#xff0c;是每个独立站主的关注焦点。本文将探索独立站如何巧妙地运用Facebook广告&#xff0c;实现精准引流和业务增长。 第一&…

性能优化-内存优化

8-《内存优化》 一.基础知识1.Java的内存分配区域2.Java的引用类型3.Java的垃圾回收机制&#xff1a;三个问题4.Android的内存管理机制 二. Android的内存泄漏、内存溢出、内存抖动概念1.**内存泄露**2.**内存抖动**3.常见的内存泄漏现象 三. 工具1.Profiler2.MAT3. Leak Canar…

高效工作了

高效工作 目录概述需求&#xff1a; 设计思路实现思路分析1.安排计划 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive.…

STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4

STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4 Proteus仿真小实验&#xff1a; STC15WProteus仿真HX711电子秤串口计价称重4x4键盘STC15W4K32S4 功能&#xff1a; 硬件组成&#xff1a;STC15W4K32S4单片机 LCD12864显示器4x4矩阵键盘HX711电子秤 1.单片机通…

人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计算机视觉、自然语言处理、推荐系统、模型压缩、强化学习、元学习)

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

QTYX量化系统实战案例分享|以小搏大选股策略一天三涨停-202306第四弹

前言 “实战案例分享系列”是和大家分享一些股票量化分析工具QTYX在实战中的应用案例&#xff08;包括失败的案例&#xff09;&#xff0c;这样能够帮助大家更好地去理解QTYX中的功能设计&#xff0c;也能更好地帮助大家搭建出属于自己的量化交易系统。 关于QTYX的使用攻略可以…

想成为“专精特新”企业?可以从这4个方面入手...

一直以来我国高度重视培育壮大中小企业&#xff0c;“专精特新企业”是近年来政府各层面都在大力扶持的重点企业类型。大批中小企业积极将“数字化”“智能化”融入生产、管理、营销、供应链协作等各个方面&#xff0c;运用新技术、新手段&#xff0c;有效提高运营效率&#xf…

Shader Graph21-UV投影cubemap

准备 https://download.csdn.net/download/zhuziying99/87900710 需要先生成dds文件&#xff0c;可以使用两个工具如果是N卡的显卡&#xff0c;可以使用 Texture Tools Exporter | NVIDIA Developer 如果是A卡的显卡&#xff0c;可以使用CubeMapGen 一、打开Unreal&#x…

Vue中如何进行数据可视化大屏展示

Vue中如何进行数据可视化大屏展示 在现代数据驱动的应用程序中&#xff0c;数据可视化大屏已经成为了非常重要的一环。通过对海量数据进行可视化展示&#xff0c;可以帮助用户更好地理解和分析数据&#xff0c;从而做出更加明智的决策。在Vue中进行数据可视化大屏展示也变得越…

SpringBoot+Vue+Java 的高校招生管理系统

文章目录 源码下载地址简介系统设计思路1 数据库设计2 系统整体设计2.1 系统设计思想2.2系统流程图 系统详细设计1系统功能模块2. 管理员功能模块3学生功能模块 源码下载地址 源码下载地址 源码下载地址https://download.csdn.net/download/JasonXu94/87870946 简介 本次设计…

开源游戏区块链项目分享:Unity开发的独立区块链

Arouse Blockchain [Unity独立区块链] ❗️千万别被误导&#xff0c;上图内容虽然都在项目中可寻&#xff0c;但与目前区块链的业务代码关联不大&#xff0c;仅供宣传作用(总得放些图看着好看)。之所以有以上内容是项目有个目标功能是希望每个用户在区块链上都有一个独一无二的…

Unity3D:Scene 视图摄像机

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 Scene 视图摄像机 摄像机设置菜单包含用于配置 Scene 视图摄像机的选项。这些调整不会影响带有摄像机组件的游戏对象上的设置。 要访问摄像机设置菜单&#xff0c;请单击 Scene 视…

安装MYSQL环境(window/linux环境)(SQL 小虚竹)

回城传送–》《100天精通MYSQL从入门到就业》 文章目录 一、windows安装mysql下载只安装mysql server客户端连接测试 二、linux安装mysql安装前的准备关闭CentOS 防火墙关闭SELinux为什么要关闭SELinux 创建MySQL用户和组 下载安装mysql解压mysql安装包配置环境创建数据目录新…

Axure RP 9 基础教程 元件基础1

第一章&#xff1a;Axure RP 9的元件(1) 1、元件的概念 首先我们来认识一下Axure RP 9元件&#xff0c;元件是组成我们原型的零件&#xff0c;也有人翻译成组件。Axure RP 9默认给我们提供了三套元件库&#xff0c;默认元件库、流程图元件库、图标元件库。可以根据自己的需要选…

Python进阶语法之断言

Python进阶语法之断言 在Python编程中&#xff0c;断言&#xff08;assertion&#xff09;是一种检查程序状态的有用工具&#xff0c;它可以帮助你找出程序中的错误。断言是在代码中设置的检查点&#xff0c;用于确保程序的某些条件必须为真&#xff0c;否则程序会引发一个错误…

代码随想录二刷day24 | 回溯算法 之 理论基础 77. 组合

day24 理论基础77. 组合递归函数的返回值以及参数回溯函数终止条件单层搜索的过程 理论基础 回溯法解决的问题都可以抽象为树形结构。 因为回溯法解决的都是在集合中递归查找子集&#xff0c;集合的大小就构成了树的宽度&#xff0c;递归的深度&#xff0c;都构成的树的深度。…

《JavaEE初阶》JVM基础知识

《JavaEE初阶》JVM基础知识 文章目录 《JavaEE初阶》JVM基础知识JVM内存区域划分堆:栈:方法区:程序计数器:划分细节: 类加载机制:双亲委派模型:垃圾回收机制(GC)什么样的内存需要GC来回收引用计数来判断对象是否是垃圾:使用可达性分析来判断对象是否为垃圾:垃圾回收策略:有缺陷…

Windows中安装和使用Kafka

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是Rockey&#xff0c;不知名企业的不知名Java开发工程师 &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;联系方式&#xff1a;he18339193956&…