这一篇教程,我们继续进行Django2个人博客系统中所有模板的制作。
在上一篇教程中,我们已经完成了基本模板“base.html”的制作。
在这个模板中,我们通过“include”包含了一些子模板,分别是:
- 导航栏:nav.html
- 底部:bottom.html
- 侧边栏:sidebar.html
1、导航栏(nav.html)
示例代码:
<div class="container"> <!--容器--> <div class="row clearfix"><!--行--> <div class="col-md-12 column"><!--列--> <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <!--导航 反色 固定顶部--> <div class="navbar-header"> <!--标题--> <a class="navbar-brand" href="/">我的博客</a><!--navbar-header和navbar-brand可以让标题文字大一号--> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><!--折叠--> <ul class="nav navbar-nav"> <!--导航列表--> <li class="active"> <!--激活的列表项--> <a href="/">首页</a> </li> <li class="dropdown"><!--下拉菜单--> <a href="#" class="dropdown-toggle" data-toggle="dropdown">分类<strong class="caret"></strong></a> <ul class="dropdown-menu"><!--下拉菜单项--> <li> <a href="{% url 'category' 2%}">Django</a> </li> <li> <a href="{% url 'category' 3%}">Django</a> </li> </ul> </li> </ul> <ul class="nav navbar-nav navbar-right " style="padding-right: 20px"><!--导航右侧--> <li class="active"> <a href="admin/">登录</a> </li> </ul> </div> </nav> </div> </div> </div>
上方代码中,标签的“class”属性作用,大家可以结合注释理解。
另外,因为导航固定在顶部,页面主体内容会从页面顶部开始加载,这就会产生导航栏遮挡页面内容的情况。
为了解决这个问题,我们需要在基本模板“base.html”的“<head>…</head>”标签之间添加样式代码。
建议样式代码添加到其它内容的末尾,也就是“</head>”标签之前。
示例代码:
<style type="text/css"> body { padding-top: 70px; padding-bottom: 50px; } </style>
上方代码中,“body”表示对“<body>”标签的样式设置。
“padding-top: 70px;”表示“<body>”内容的上方填充70像素的空白。
“padding-bottom: 50px;”表示“<body>”内容的下方填充50像素的空白。
通过这个两项样式设置,让页面主体内容与导航栏和底部产生间隔。
呈现效果:(PC端)
呈现效果:(移动端)
2、底部(bottom.html)
示例代码:
<div class="copyright"> <!--版权--> <a href="http://www.opython.com " style="color: #9d9d9d">我的博客</a> 版权所有,保留一切权利 · 基于Django构建 · © 2017-2018 </div>
底部的代码比较简单,但是只有这些代码不能满足我们的样式需求。
因为协调统一的话,底部应该像导航一样,黑色并且水平铺满屏幕,同时页面内容过短时也应该在浏览器窗口的底部。
为了满足这样的需求,我们需要在基本模板的样式代码中继续添加对“<footer>”标签、class“copyright”以及HTML页面的样式设置。
html { position: relative; # 相对定位(相对当前元素的位置) min-height: 100%; # 页面最小高度为100%页面内容总高度 } footer { # 定义“<footer>”标签的样式 position: absolute; # 绝对位置 (父级元素的具体位置) bottom: 0; # 标签内容底部与父级元素(本案例中父级元素为<html>)底部间隔,“0”表示无间隔,如有间隔需要用像素(px)表示。 width: 100%; # 100%浏览器窗口宽度 } .copyright { # 定义class“<copyright >”标签的样式,注意以“.”开头。 background: #111; # 背景颜色 font-size: 13px; # 字体尺寸 text-align: center; # 字体水平居中对齐 color: #555; # 字体颜色 padding-top: 14px; # 顶部填充 padding-bottom: 14px; # 底部填充 border-top: 3px solid #337ab7; # 上边框的线条粗细、线型(当前为实线)和颜色 }
为了方便大家理解样式的作用,在上方代码中我添加了相应的注释,使用时请将注释删除。
并且,为了帮助大家理解我对这些样式,再做一下简单的描述。
html:定义了以当前页面确定位置,所以最小高度为当前页面内容的100%高度;
footer:是“html”的子元素,位置通过html的边界确定,与底部无间隔,所以处于页面最底部,并且宽度为整体页面宽度;
copyright:所在的<div>标签是”footer的子元素,宽高与“footer”一致。
提示:实际上,我们可以直接将“copyright”的样式设置,放在“footer”的样式设置中,无需单独设置。
呈现效果:
3、侧边栏(sidebar.html)
侧边栏内容是一个站内搜索框。
示例代码:
<div class="panel panel-default"> <!--面板 默认样式--> <a href="#" class="list-group-item active"><!--列表组合的项 激活状态--> 站内搜索 </a> <div class="list-group-item"><!--列表组合的项--> <form class="bs-example bs-example-form" role="search" action="../search/" method="get"> <!--搜索表单--> <div class="input-group"> <!--输入框组合--> <input type="text" class="form-control" name="key" value="{{ key }}"> <!--输入框 默认值来自key变量--> <span class="input-group-btn"> <!--输入框组合的按钮--> <button class="btn btn-default" type="submit"> <!--按钮默认样式 类型为表单提交按钮--> <span class="glyphicon glyphicon-search"></span><!--按钮中的字体图标--> </button> </span> </div> </form> </div>
上方代码中,同样添加了相应的注释,方便大家理解。
呈现效果:
以上就是基本模板“base.html”相关子模板的制作。
在之后的教程中,我们进行剩余模板的制作。
不过,剩余模板都是需要整合数据内容,比较好的实现过程是:视图>URL配置>模板。
通过这样的过程,我们能够比较方便的完成每一个页面功能的实现。
因为有了视图,才能在URL配置中调用视图;有了URL配置,才能够在模板中添加请求路径(使用URL Name)和使用带有数据的变量。
转载请注明:魔力Python » Django2练习项目:开发个人博客系统(4)