实践三:母版的应用与静态文件管理

实践三:母版的应用与静态文件管理

内容介绍:本节内容将讲解母版的使用和静态文件管理。

(1)母版通常用于统一页面风格和精简网页代码,将通用的代码提炼出来放在母版中,其他页面可通过继承来使用母版所共享的内容,如页眉页脚等。

(2)静态文件文件夹(static)用于存放本地图片、JavaScript和CSS等文件,它有助于静态文件的组织管理和在页面上的正常呈现,如让图片在网页上正常显示。

一、母版的应用

1. 在实践一、实践二的基础上,继续该部分内容。

2. 在templates文件夹中添加base.html文件,并在base.html文件中添加如下内容:

<!-- templates/base.html -->
<header>
<a href="{% url 'home' %}">主页</a> | <a href="{% url 'about' %}">关于我们</a>
</header>
{% block content %}
{% endblock content %}

知识点:

模板继承:Django 的模板引擎中最强大的——也是最复杂的——部分是模板继承。模板继承允许你建立一个基本的“骨架”模板(母版base.html ),它包含了你网站需要共享的内容和样式(如页眉、页脚、导航甚至整体的样式),并留出了空位置供子模板自行决定填充什么内容。使用母版可以统一网站所有页面的结构和风格,并使得代码更加简洁。

通常,HTML页面有着固定的组成结构,一些代码(HTML内容)是所有HTML页面所共享的,如使用相同的页眉(header)和页脚(footer),我们可以把这部分代码(HTML内容)提炼出来,作为一个基本模板(类似于PPT中的母版,此处我们也称之为母版)供其他页面共同使用。

代码解释:

(1)base.html文件将作为该项目的母版,<header></header>部分是所有所有子模板可以共享的内容,即home.html和about.html均可继承这里<header></header>所包含的内容;

(2)<a href="{% url 'home' %}">主页</a>设置该超链接导航到名称为“home”的url上,此处的“home”名在home/urls.py中已经定义了,如下:

# home/views.py
from django.views.generic import TemplateView

class HomePageView(TemplateView):
    template_name='home.html'

(3)在base.html中使用{% block content %} {% endblock content %}定义了一个子模板可填充的块(block),即在母版中留了一个空位置,这个空位置是留给子模板填充他们自己的内容。子模块通过继承base.html,并在{% block content %} {% endblock content %}之间添加自己的内容,这样所有的子模板既可以共享母版的公有内容(此处为<header></header>所包含的内容),又可以自定义一部分内容(放在块(block)中)。

3. home.html文件对母版(base.html)进行继承,更新templates/home.html页面的代码:

{% extends 'base.html' %}
{% block content %}
<h1>我的主页</h1>
{% endblock content %}

代码解释:

(1){% extends "base.html" %}告诉模板引擎,这个子模板(home.html)将继承了base.html母版,当系统执行home.html文件时,首先要将base.html中的通用内容添加到home.html中。

(2){% block content %} {% endblock content %}之间的内容为home.html自己特有的内容,它填充了base.html中的空白块(block)。

4. 更新templates/about.html页面的代码

{% extends 'base.html' %}
{% block content %}
<h1>关于我们</h1>
{% endblock content %}

解释:同home.html一样,通过“extends”继承母版(base.html)中的部分内容和结构,同时用自己的内容“<h1>关于我们</h1>”填充从base.html中的空白块(block)。

5. 效果图如下

点击“主页”将导航到“我的主页”页面

点击“关于我们”将导航到“关于我们”页面

6. 添加bootstrap前端框架。

bootstrap前端框架能帮助我们快速的美化HTML页面,更新base.html文件,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>myweb</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">   
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</head>

<body>
    <!-- 页眉的导航栏将会被子模板继承 -->
    <nav class="navbar navbar-expand-sm bg-light">   
        <div class="container-fluid">
            <ul class="navbar-nav">
                <li class="nav-item">
                    <a class="nav-link" href="{% url 'home' %}">主页</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="{% url 'about' %}">关于我们</a>
                </li>
            </ul>
        </div>
    </nav>
    <!-- block部分将被子模板用来填充自己独立的内容 -->
    <div class="container">
        {% block content %}
        {% endblock content %}
    </div>
</body>
</html>

代码解释:此处我们引用了bootstrap框架,并在母版中设置了一个导航栏(<nav></nav>所包含的内容),{% block content %} {% endblock content %}用于留出空位置,让子模板自己去定义里面放什么内容。

6. 刷新页面,效果如下:

点击“主页”将导航到“我的主页”页面

点击“关于我们”将导航到“关于我们”页面

二、静态文件管理

当我们想要在页面中显示图片或是加载本地JavaScript、CSS等静态文件时,直接在html添加引用会出现问题,这些文件无法加载进来。

1. 在“主页”中添加图片(错误示范)

(1)将“冰淇淋.png”图片放在templates文件夹中

(2)修改templates/home.html文件的代码如下:

{% extends 'base.html' %}
{% block content %}
<h1>我的主页</h1>
<img src="冰淇淋.png" alt="冰淇淋" width="400px;">
{% endblock content %}

(3)刷新主页,页面效果如下:

 问题出现了,我们添加的图片不能在页面中正常显示。在Django网站中,静态文件(如图片、JavaScript文件、CSS文件等)需要使用静态文件管理,否则在加载到页面中会出错。

8. 在“主页”中添加图片(正确示范)

(1)在myweb文件夹下新建static文件夹,结构如下:

 (2)在static文件夹下新建一个images文件夹,并将“冰淇淋.png”图片移到images文件夹中

 (3)更新my_project下的settings.py文件

STATIC_URL = 'static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

(4)更新templates/home.html文件

{% extends 'base.html' %}
{% load static %}
{% block content %}
<h1>我的主页</h1>
<img src="{% static 'images/冰淇淋.png' %}" alt="冰淇淋" width="400px;">
{% endblock content %}

(5)重新启动服务器,刷新页面查看效果

python manage.py runserver

效果如下:

此时,页面已经能正常显示图片了。

9. 将base.html文件中的css文件和js文件本地化

当前,base.html文件是引用的外部css和js文件,当访问外部网站受限或网速较慢时,网页加载会很慢,为解决这个问题,我们有必要将css和js文件放在本地服务器上。注意:有时候直接引用外部文件也会很快,这个主要取决于加载外部文件是否受阻或网速快慢。

(1)在static文件夹中创建一个css文件夹,用于存放网站要用到的所有css文件

(2)通过base.html中<head></head>中的超链接下载bootstrap.min.css文件

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">   

通过该超链接,下载bootstrap.min.css文件到static/css文件夹中。

(3)在static文件夹中创建一个js文件夹,用于存放网站要用到的所有JavaScript文件

(4)通过base.html中<head></head>中的超链接下载bootstrap.bundle.min.js文件

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>

通过该超链接,下载bootstrap.min.css文件到static/js文件夹中。

(5)更新base.html中<head></head>部分的内容

<!DOCTYPE html>
<html lang="en">
<head>
    <!-- 加载静态文件 -->
    {% load static %}  
    <title>myweb</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 删除外部引用,引用本地的css和js文件 -->
    <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet"> 
    <script src="{% static 'js/bootstrap.bundle.min.js' %}"></script>
</head>

10. 删除浏览器的历史纪录,并重新启动本地服务器,查看页面内容。此时我们引用的是本地的css和js文件了。

 

 

 

 

 

 

 

通过该超链接,下载bootstrap.min.css文件到static/css文件夹中。
posted @ 2025-03-10 10:22  天净沙秋思  阅读(743)  评论(0)    收藏  举报