整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

16.python学习笔记-页面样式

16.python学习笔记-页面样式

一章我们完成了“学习笔记”Web应用程序的大部分功能,本章我们将通过Bootstrap对页面样式进行美化,这样会让我们的项目看起来更加专业。

页面样式

Bootstrap主页地址:

https://getbootstrap.com/

Bootstrap主页:

Bootstrap可以看作一个大型样式设置工具集,提供了大量模版用于设置页面样式,创建独特的项目总体风格。

1.下载安装

我们将使用django_bootstrap5将Bootstrap包含到项目当中,执行如下命令,下载安装django_bootstrap5:

pip install django_bootstrap5

2.注册第三方应用

修改项目的setting.py,将django_bootstrap5作为第三方应用程序注册到项目当中:

3.设置base.html的样式

修改base.html:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>学习笔记</title>
  <!-- 加载bootstrap的样式 -->
  {% load django_bootstrap5 %}
  {% bootstrap_css %}
  {% bootstrap_javascript %}

</head>
<body>
  <!-- 定义导航栏 -->
  <nav class="navbar navbar-expand-md navbar-light bg-light mb-4 border">
    <div class="container-fluid">
      <a class="navbar-brand" href="{% url 'learning_logs:index' %}">
          学习笔记</a>

      <button class="navbar-toggler" type="button" data-bs-toggle="collapse"
        data-bs-target="#navbarCollapse" aria-controls="navbarCollapse"
        aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>

      <div class="collapse navbar-collapse" id="navbarCollapse">
        <ul class="navbar-nav me-auto mb-2 mb-md-0">
          <li class="nav-item">
            <a class="nav-link" href="{% url 'learning_logs:topics' %}">
              主题列表</a></li>
        </ul> <!-- End of links on left side of navbar -->

        <!-- Account-related links -->
        <ul class="navbar-nav ms-auto mb-2 mb-md-0">

          {% if user.is_authenticated %}
            <li class="nav-item">
              <span class="navbar-text me-2">你好, {{ user.username }}.
                </span></li>
          {% else %}
            <li class="nav-item">
              <a class="nav-link" href="{% url 'accounts:register' %}">
                  注册</a></li>
            <li class="nav-item">
              <a class="nav-link" href="{% url 'accounts:login' %}">
                  登录</a></li>
          {% endif %}

        </ul> <!-- End of account-related links -->

        {% if user.is_authenticated %}
          <form action="{% url 'accounts:logout' %}" method='post'>
            {% csrf_token %}
            <button name='submit' class='btn btn-outline-secondary btn-sm'>
              注销</button>
          </form>
        {% endif %}

      </div> <!-- Closes collapsible parts of navbar -->

    </div> <!-- Closes navbar's container -->
  </nav> <!-- End of navbar -->
<!--div可以看作一个包含其他内容的容器,class属性设置块样式-->
  <main class="container">
    <div class="pb-2 mb-2 border-bottom">
      {% block page_header %}{% endblock page_header %}
    </div>

    <div>
      {% block content %}{% endblock content %}
    </div>
  </main>

</body>
</html>

3.设置index.html的样式

修改index.html:

{% extends 'learning_logs/base.html' %}

{% block page_header %}
  <div class="p-3 mb-4 bg-light border rounded-3">
    <div class="container-fluid py-4">
      <h1 class="display-3">记录您感兴趣的内容</h1>
      
      <p class="lead">使用学习笔记,每当您遇到感兴趣的内容,
        创建一个新主题,通过条目分类记录下来。</p>

      <a class="btn btn-primary btn-lg mt-1"
          href="{% url 'accounts:register' %}">注册 ?</a>
    </div>
  </div>
{% endblock page_header %}

4.设置topics.html的样式

修改topics.html:

{% extends 'learning_logs/base.html' %}

{% block page_header %}
  <h1>所有主题</h1>
{% endblock page_header %}

{% block content %}

  <ul class="list-group border-bottom pb-2 mb-4">
    {% for topic in topics %}
      <li class="list-group-item border-0">
        <a href="{% url 'learning_logs:topic' topic.id %}">
          {{ topic.text }}</a>
      </li>
    {% empty %}
      <li class="list-group-item border-0">还没有创建任何主题。</li>
    {% endfor %}
  </ul>

  <a href="{% url 'learning_logs:new_topic' %}">创建主题</a>

{% endblock content %}

5.修改new_topic.html

{% extends "learning_logs/base.html" %}

{% block content %}
  <p>创建主题:</p>

  <form action="{% url 'learning_logs:new_topic' %}" method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">保存</button>
  </form>

{% endblock content %}

6.修改new_entry.html

{% extends "learning_logs/base.html" %}

{% block content %}

  <p><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></p>

  <p>创建条目:</p>
  <form action="{% url 'learning_logs:new_entry' topic.id %}" method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name='submit'>保存</button>
  </form>

{% endblock content %}

7.修改new_entry.html

{% extends "learning_logs/base.html" %}

{% block content %}

  <p><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></p>

  <p>编辑条目:</p>

  <form action="{% url 'learning_logs:edit_entry' entry.id %}" method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name="submit">保存</button>
  </form>

{% endblock content %}

测试页面样式

从上面修改过程可以看到,修改页面样式,并不需要修改后段代码,这正是MTV(模型M,模板T和视图V)模式带来的好处。

1.启动服务器

python manage.py runserver

2.使用浏览器访问

http://127.0.0.1:8000

3.默认主页展示

4.登录成功


5.创建新主题

6.点击主题列表


7.点击特定主题


8.创建新条目

档的标题

[demo]

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta http-equiv="Content-Language" content="zh-cn" />

<title>标题不会显示在文档区</title>

</head>

<body>

<p>这段文本会显示出来。</p>

</body>

</html>

[/demo]

<title> 标题定义文档的标题。

所有链接一个目标

[demo]

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<meta http-equiv="Content-Type" content="text/html" />

<meta http-equiv="Content-Language" content="zh-cn" />

<base target="_blank" />

</head>

<body>

<p>

<a href="http://www.w3school.com.cn" target="_blank">这个连接</a> 将在新窗口中加载,因为 target 属性被设置为 "_blank"。

</p>

<p>

<a href="http://www.w3school.com.cn">这个连接</a> 也将在新窗口中加载,即使没有 target 属性。

</p>

</body>

</html>

[/demo]

如何使用 base 标签使页面中的所有标签在新窗口中打开。

文档描述

[demo]

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta name="author"

content="w3school.com.cn">

<meta name="revised"

content="David Yang,8/1/07">

<meta name="generator"

content="Dreamweaver 8.0en">

</head>

<body>

<p>本文档的 meta 属性标识了创作者和编辑软件。</p>

</body>

</html>

[/demo]

使用 <meta> 元素来描述文档。

文档关键词

[demo]

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta name="description"

content="HTML examples">

<meta name="keywords"

content="HTML, DHTML, CSS, XML, XHTML, JavaScript, VBScript">

</head>

<body>

<p>本文档的 meta 属性描述了该文档和它的关键词。</p>

</body>

</html>

[/demo]

使用 <meta> 元素来定义文档的关键词。

重定向用户

[demo]

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<meta http-equiv="Refresh" content="5;url=http://www.w3school.com.cn" />

</head>

<body>

<p>

对不起。我们已经搬家了。您的 URL 是 <a href="http://www.w3school.com.cn">http://www.w3school.com.cn</a>

</p>

<p>您将在 5 秒内被重定向到新的地址。</p>

<p>如果超过 5 秒后您仍然看到本消息,请点击上面的链接。</p>

</body>

</html>

[/demo]

如何把用户重定向到新的网址。

HTML <head> 元素

<head> 元素是所有头部元素的容器。<head> 内的元素可包含脚本,指示浏览器在何处可以找到样式表,提供元信息,等等。

以下标签都可以添加到 head 部分:<title>、<base>、<link>、<meta>、<script> 以及 <style>。

HTML <title> 元素

<title> 标签定义文档的标题。

title 元素在所有 HTML/XHTML 文档中都是必需的。

title 元素能够:

定义浏览器工具栏中的标题

提供页面被添加到收藏夹时显示的标题

显示在搜索引擎结果中的页面标题

一个简化的 HTML 文档:

[demo]

<!DOCTYPE html>

<html>

<head>

<title>Title of the document</title>

</head>

<body>

The content of the document......

</body>

</html>

[/demo]

HTML <base> 元素

<base> 标签为页面上的所有链接规定默认地址或默认目标(target):

<head>

<base href="http://www.w3school.com.cn/images/" />

<base target="_blank" />

</head>

HTML <link> 元素

<link> 标签定义文档与外部资源之间的关系。

<link> 标签最常用于连接样式表:

<head>

<link rel="stylesheet" type="text/css" href="mystyle.css" />

</head>

HTML <style> 元素

<style> 标签用于为 HTML 文档定义样式信息。

您可以在 style 元素内规定 HTML 元素在浏览器中呈现的样式:

<head>

<style type="text/css">

body {background-color:yellow}

p {color:blue}

</style>

</head>

HTML <meta> 元素

元数据(metadata)是关于数据的信息。

<meta> 标签提供关于 HTML 文档的元数据。元数据不会显示在页面上,但是对于机器是可读的。

典型的情况是,meta 元素被用于规定页面的描述、关键词、文档的作者、最后修改时间以及其他元数据。

<meta> 标签始终位于 head 元素中。

元数据可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 web 服务。

针对搜索引擎的关键词

一些搜索引擎会利用 meta 元素的 name 和 content 属性来索引您的页面。

下面的 meta 元素定义页面的描述:

<meta name="description" content="Free Web tutorials on HTML, CSS, XML" />

下面的 meta 元素定义页面的关键词:

<meta name="keywords" content="HTML, CSS, XML" />

name 和 content 属性的作用是描述页面的内容。

HTML <script> 元素

<script> 标签用于定义客户端脚本,比如 JavaScript。

我们会在稍后的章节讲解 script 元素。

HTML 头部元素

标签 描述

<head> 定义关于文档的信息。

<title> 定义文档标题。

<base> 定义页面上所有链接的默认地址或默认目标。

<link> 定义文档与外部资源之间的关系。

<meta> 定义关于 HTML 文档的元数据。

<script> 定义客户端脚本。

<style> 定义文档的样式信息。

管现代Web开发更加依赖于各种MVC框架,但是开发者仍然需要对HTML和DOM有基本的了解。然而,即使对有多年经验的前端开发人员来说,也会遇到一些不知道的情况。

HTML头部元素描述

HTML<head>元素用作元数据(关于数据的数据)的容器。它用在<html>标签和<body>标签之间。

HTML文档的头部内容在页面加载时不会显示在浏览器中。它仅包含有关HTML文档的元数据。

元数据定义HTML文档的标题,字符集,样式,链接,脚本和其他元信息。

HTML头部可以包含很多元数据信息,也可以很少或没有信息,这取决于我们的需求。但是头部对HTML文档至关重要。

HTML<head>元素

<head>元素包含了所有的头部标签元素。在<head>元素中你可以插入脚本(scripts),样式文件(CSS),及各种meta信息。

可以添加在头部区域的元素标签为:<title>,<style>,<meta>,<link>,<script>,<noscript>和<base>。

HTML<title>元素

HTML<title>元素用于定义文档的标题。它在所有HTML/XHTML文档中使用。<title>元素必须放在<head>元素之间,并且一个文档只能有一个title元素。

<title>元素作用

它定义了浏览器选项卡中的标题。

当用户将页面添加到收藏夹时,它为页面提供标题。

它在搜索引擎结果中显示页面的标题。

示例代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>文档标题</title>
    </head>
    <body>文档内容......</body>
</html>12345678复制代码类型:[html]

HTML<base>元素

<base>标签描述了基本的链接地址/链接目标,该标签作为HTML文档中所有的链接标签的默认链接:

<head>
<base href="http://www.runoon.com/images/" target="_blank">
</head>123复制代码类型:[html]

HTML<link>元素

HTML<link>元素用于将外部样式表链接到您的网页。<link>元素包含两个主要属性,即“rel”和“href”。rel属性表示它是一个样式表,href给出该外部文件的路径。

<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>123复制代码类型:[html]

HTML<style>元素

HTML<style>元素用于为HTML页面设置样式。<style>元素只影响当前页面HTML页面的CSS属性。如果要对多个页面应用CSS,则应使用单独的CSS文件。

<head>
    <style type="text/css">body {background-color:yellow} p {color:blue}</style>
</head>123复制代码类型:[html]

HTML<meta>元素

HTML<meta>元素用于指定网页上的字符集,页面描述,关键字,作者和其他元数据。

搜索引擎和其他Web服务使用元数据来更好地对网页进行排名。

<meta>标签提供的元数据不显示在页面上,但会被浏览器解析。

<meta>一般放置于<head>区域。

<meta>标签定义字符集:

<meta charset="UTF-8">  1复制代码类型:[html]

charset属性指定字符编码。在此示例中,我们将其设置为“UTF-8”,这意味着它可以显示任何语言。

<meta>标签定义搜索引擎关键词:

<meta name="keywords" content="HTML, CSS, XML, XHTML, JavaScript">1复制代码类型:[html]

<meta>标签定义网页描述内容:

<meta name="description" content="免费 Web & 编程 教程">1复制代码类型:[html]

<meta>标签定义网页作者:

<meta name="author" content="Runoon">1复制代码类型:[html]

<meta>标签定义每30秒钟刷新页面:

<meta http-equiv="refresh" content="30">1复制代码类型:[html]

元刷新用于向浏览器提供指令,以在给定的时间间隔后自动刷新页面。如上例所示,它将在30秒后自动刷新。

<meta http-equiv="refresh" content="10; url=https://www.javatpoint.com/html>1复制代码类型:[html]

如果添加了URL,则在指定时间结束后重定向到该页面。

<meta>标签定义设备尺寸

HTML5中引入了此方法,以通过使用<meta>标签来控制视窗大小。视窗是用户在网页上的可见区域。它随设备的不同而变化,在手机上的显示尺寸明显小于计算机屏幕。

<meta name="viewport" content="width=device-width, initial-scale=1.0">  1复制代码类型:[html]

<meta>视窗元素如何设定和控制页面的尺寸和缩放比例。

width=device-width是用来设置页面的宽度将与设备的屏幕宽度保持一致。

当最初由浏览器加载页面时,initial-scale=1.0用于设置初始缩放级别。

HTML<script>元素

<script>标签用于加载脚本文件,如:JavaScript。

<script>元素在以后的章节中会详细描述。

HTMLhead元素

标签

描述

<head>

定义了文档的信息

<title>

定义了文档的标题

<base>

定义了页面链接标签的默认链接地址

<link>

定义了一个文档和外部资源之间的关系

<meta>

定义了HTML文档中的元数据

<script>

定义了客户端的脚本文件

<style>

定义了HTML文档的样式文件

「链接」