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


欢迎关注 『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开发』 系列,持续更新中
【更多内容敬请期待】


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值