一章我们完成了“学习笔记”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<head>元素用作元数据(关于数据的数据)的容器。它用在<html>标签和<body>标签之间。
HTML文档的头部内容在页面加载时不会显示在浏览器中。它仅包含有关HTML文档的元数据。
元数据定义HTML文档的标题,字符集,样式,链接,脚本和其他元信息。
HTML头部可以包含很多元数据信息,也可以很少或没有信息,这取决于我们的需求。但是头部对HTML文档至关重要。
<head>元素包含了所有的头部标签元素。在<head>元素中你可以插入脚本(scripts),样式文件(CSS),及各种meta信息。
可以添加在头部区域的元素标签为:<title>,<style>,<meta>,<link>,<script>,<noscript>和<base>。
HTML<title>元素用于定义文档的标题。它在所有HTML/XHTML文档中使用。<title>元素必须放在<head>元素之间,并且一个文档只能有一个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文档的样式文件 |
「链接」
*请认真填写需求信息,我们会在24小时内与您取得联系。