设计系统首页(文章列表渲染)

摘要:
--引入了Bootstrap核心JavaScript文件--˃复制引导导航栏模板代码,将这些代码复制到索引页上的body标记中。对导航栏代码进行适当调整。由于我们的页面导航栏不可用,请删除表单标记和模板中的标记。--/.navbar collapse--˃未登录时显示如下:单击登录跳转

一、系统首页导航区域

1、让http://127.0.0.1:8000可以直接访问首页

  添加一条urls.py配置:

urlpatterns = [
    .....
    re_path('^$', views.index),   # 访问http://127.0.0.1:8000  可以直接访问首页
]

2、应用bootstrap快速编写index首页导航条

(1)引入bootstrap核心文件和jquery

<head>
    <!-- 引入 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="http://t.zoukankan.com/static/blog/bootstrap-3.3.7/css/bootstrap.css">
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="http://t.zoukankan.com/static/js/jquery-3.3.1.js"></script>
    <!-- 引入 Bootstrap 核心 JavaScript 文件 -->
    <script src="http://t.zoukankan.com/static/blog/bootstrap-3.3.7/js/bootstrap.js"></script> <!--依赖jquery-->
</head>

(2)拷入bootstrap导航条模板代码

  设计系统首页(文章列表渲染)第1张

  拷贝这些代码到index页面的body标签内。

(3)对导航条代码做适当调整

  由于我们的页面导航栏用不上,删除模板中的form标签和<li class="dropdown">标签的内容。

  设计系统首页(文章列表渲染)第2张

  添加导航栏栏目,编写模板语句,判定登录和未登录两种状态下导航栏右侧显示:

<div   id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="active"><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">园子 <span class="sr-only">(current)</span></a></li>
                <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">新闻</a></li>
                <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">博问</a></li>
                <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">闪存</a></li>
                <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">小组</a></li>
                <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">收藏</a></li>
                <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">招聘</a></li>
                <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">班级</a></li>
                <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">找找看</a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right">
                {% if request.user.is_authenticated %}
                    {# 已经登录 #}
                    <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">{{ request.user.username }}</a></li>
                    <li class="dropdown">
                    <a href="http://t.zoukankan.com/xiugeng-p-9396593.html#"   data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">Dropdown <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">修改密码</a></li>
                        <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">修改头像</a></li>
                        <li><a href="http://t.zoukankan.com/logout/">注销</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">Separated link</a></li>
                    </ul>
                </li>
                {% else %}
                    {# 还未登录 #}
                    <li><a href="http://t.zoukankan.com/login/">登录</a></li>
                    <li><a href="http://t.zoukankan.com/register/">注册</a></li>
                {% endif %}
            </ul>
        </div><!-- /.navbar-collapse -->
    </div>

  未登录情况下显示如下:

  设计系统首页(文章列表渲染)第3张

  点击登录跳转到登录页面登录,输入yuan/yuan1234和验证码后,登录成功,跳转回index首页:

  设计系统首页(文章列表渲染)第4张

(4)运用用户认证组件添加logout注销功能

  首先在路由中添加logout路径:

path('logout/', views.logout),

  其次在视图中编写logout视图函数:

from django.contrib import auth   # 引入用户认证组件auth模块

def logout(request):
    auth.logout(request)   # 等同于执行request.session.flush()
    return redirect("/login/")

  在首页点击注销操作,页面返回到登录页面,手动访问博客首页,导航栏右侧显示登录/注册按钮。

(5)在导航栏添加小人图标

  首先在用户名前添加span标签,并添加bootstrap样式

<ul class="nav navbar-nav navbar-right">
    {% if request.user.is_authenticated %}
        {# 已经登录 #}
        <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#"><span   class="glyphicon glyphicon-user"></span>{{ request.user.username }}</a></li>
        <li class="dropdown">
        <a href="http://t.zoukankan.com/xiugeng-p-9396593.html#"   data-toggle="dropdown" role="button" aria-haspopup="true"
           aria-expanded="false">Dropdown <span class="caret"></span></a>
        <ul class="dropdown-menu">
            <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">修改密码</a></li>
            <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">修改头像</a></li>
            <li><a href="http://t.zoukankan.com/logout/">注销</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="http://t.zoukankan.com/xiugeng-p-9396593.html#">Separated link</a></li>
        </ul>
    </li>
    {% else %}
        {# 还未登录 #}
        <li><a href="http://t.zoukankan.com/login/">登录</a></li>
        <li><a href="http://t.zoukankan.com/register/">注册</a></li>
    {% endif %}
</ul>

  注意bootstrap的Glyphicons 字体图标使用:

  设计系统首页(文章列表渲染)第5张

  调整小人图标样式:

<style>
    #user_icon {
        font-size: 18px;  /*调整大小*/
        margin-right: 10px;   /*调整距离*/
        vertical-align: -3px;  /*调整高度*/
    }
</style>

   显示效果如图所示:

  设计系统首页(文章列表渲染)第6张

二、系统首页主体布局

  利用bootstrap提供的栅格系统,将页面按3-6-3的比例划分:

<div class="container-fluid">
    <div class="row">
        <div class="col-md-3">111</div>
        <div class="col-md-6">222</div>
        <div class="col-md-3">333</div>
    </div>
</div>

  左右两个部分先不做,暂时使用bootstap的面板进行填充:

<div class="panel panel-warning">
    <div class="panel-heading">Panel heading without title</div>
    <div class="panel-body">
        Panel content
    </div>
</div>

  显示效果如下所示:

  设计系统首页(文章列表渲染)第7张

三、Django的admin组件介绍及使用

  admin是Django内部的一个组件:后台数据管理组件(WEB页面)。admin并不是项目必需的。

1、创建用户认证组件超级用户来登录和使用admin组件页面

(venv) MacBook-Pro:cnblog hqs$ python3 manage.py createsuperuser
Username: alex
Email address:  
Password: 
Password (again): 
Superuser created successfully.

  创建好新的超级用户的账号密码:alex/alex1234,访问admin页面:

  设计系统首页(文章列表渲染)第8张

  登录成功后显示如下:

  设计系统首页(文章列表渲染)第9张

2、admin注册

  在cnblog/blog/admin.py里引入models,并以如下方式注册表:

from django.contrib import admin

# Register your models here.
from blog import models

admin.site.register(models.UserInfo)   # 用户信息表
admin.site.register(models.Blog)
admin.site.register(models.Category)
admin.site.register(models.Tag)
admin.site.register(models.Article)    # 文章表
admin.site.register(models.ArticleUpDown)   # 文章点赞表
admin.site.register(models.Article2Tag)
admin.site.register(models.Comment)   # 评论表

  注册完成后,页面如下所示:

  设计系统首页(文章列表渲染)第10张

3、如何利用admin录入文章数据

(1)创建博客对象

  设计系统首页(文章列表渲染)第11张

  创建好的博客对象如下所示:

  设计系统首页(文章列表渲染)第12张

(2)博客对象和用户绑定一对一关系

  如下所示将alex绑定曹刘社区,yuan绑定yuan个人博客。

  设计系统首页(文章列表渲染)第13张

(3)在Articles表里录入文章数据

  设计系统首页(文章列表渲染)第14张

  填写并保存文章,发现admin强行限制Category(分类)必须得加。

  添加category对象:

  设计系统首页(文章列表渲染)第15张

  文章添加成功:

  设计系统首页(文章列表渲染)第16张

四、系统首页的文章列表渲染

1、拿到当前所有文章对象传递到index首页

views.py:

from blog import models

def index(request):
    # 拿到当前所有的文章
    article_list = models.Article.objects.all()
    return render(request, "index.html", {"article_list": article_list})

2、首页文章列表初步渲染

index.html:

<!--文章列表部分-->
<div class="col-md-6">
    <div class="article_list">
        {% for article in article_list %}
            <div class="article-item">
                <h5><a href="http://t.zoukankan.com/xiugeng-p-9396593.html">{{ article.title }}</a></h5>
                <div class="article-desc">
                    <span class="media-left">
                        {# 用户头像 #}
                        <a href="http://t.zoukankan.com/xiugeng-p-9396593.html"><img     src="http://t.zoukankan.com/media/{{ article.user.avatar }}" alt=""></a>
                    </span>
                    <span class="media-right">
                        {# 文章摘要 #}
                        {{ article.desc }}
                    </span>
                </div>
            </div>
            <hr>
        {% endfor %}
    </div>
</div>

注意:

  (1)浏览器访问头像路径一定要在前面拼接media别名

<div class="article-desc">
    <span>
        <a href="http://t.zoukankan.com/xiugeng-p-9396593.html"><img     src="http://t.zoukankan.com/media/{{ article.user.avatar }}" alt=""></a>
    </span>
</div>

  (2)获取文章摘要信息

<span class="media-right">
    {# 文章摘要 #}
    {{ article.desc }}
</span>

  (3)利用bootstrap提供的media-left和media-right调整文章样式,添加<hr>标签分隔文章块。

显示效果如下:

  设计系统首页(文章列表渲染)第17张

3、进一步渲染文章列表详细信息

index.html:

<!--文章下方详细信息-->
<div class="small pub_info">
    {# 作者 #}
    <span><a href="http://t.zoukankan.com/xiugeng-p-9396593.html">{{ article.user.username }}</a></span>    
    {# 文章发布时间 #}
    <span>发布于  {{ article.create_time|date:"Y-m-d H:i" }}</span>   
    {# 评论数 #}
    <span class="glyphicon glyphicon-comment"></span> 评论({{ article.comment_count }})  
    {# 点赞数 #}
    <span class="glyphicon glyphicon-thumbs-up"></span> 点赞({{ article.up_count }})
</div>

注意:

(1)日期显示需要修改时区,修改settings.py中的TIME_ZONE字段

# TIME_ZONE = 'UTC'
TIME_ZONE = "Asia/Shanghai"

(2)引入bootstrap的Glyphicons字体图标显示评论图标和点赞图片

{# 评论数 #}
<span class="glyphicon glyphicon-comment">评论({{ article.comment_count }})</span>   
{# 点赞数 #}
<span class="glyphicon glyphicon-thumbs-up">点赞({{ article.up_count }})</span>

(3)在这里发现模型中Article类的评论、点赞计数字典没有添加,系统报错

comment_count = models.IntegerField(default=0)
up_count = models.IntegerField(default=0)
down_count = models.IntegerField(default=0)

   添加上述代码后,再次执行数据库迁移命令:

$ python3 manage.py makemigrations

$ python3 manage.py migrate

 (4)样式调整,给这个详情信息区域添加class="small",让字体变小外,通过CSS调整图标样式

<style>
    #user_icon {
        font-size: 18px; /*调整大小*/
        margin-right: 10px; /*调整距离*/
        vertical-align: -3px; /*调整高度*/
    }
    .pub_info {
        margin-top: 10px;

    }
    .pub_info .glyphicon-comment {
        vertical-align: -1px;
    }
</style>

显示效果:

  设计系统首页(文章列表渲染)第18张

免责声明:文章转载自《设计系统首页(文章列表渲染)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jenkins 集成 redmine 账户验证的方案IOS学习之IOS沙盒(sandbox)机制和文件操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ztree _ 横向显示子节点、点击文字勾选、去除指定元素input的勾选状态

前些天项目需要树结构表现数据,需求ztree就能满足所以直接使用ztree只是踩了些小坑。。。 1.ztree子节点横向显示(下图): 效果说明:第三级子节点按需求横向显示其他竖向显示,每行最多显示5个(修改位置在zTreeStyle.css里面哦,在外面设置不上的,页面也获取不到想要设置样式的节点。。。如果你能还望赐教)代码如下: 1 .ztree&g...

js实现瀑布流以及加载效果

一、瀑布流是个啥?   瀑布流,是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。   最早采用瀑布流布局的网站是Pinterest,逐渐在国内流行开来,比如我们熟知的百度图片的布局,在“很久”以前,百度图片还是需要一页一页的点击进行查看更多图片,而现在的瀑布流布局使用户查找图片...

JQuery中的DOM操作

内容摘录自锋利的JQuery一书 一. DOM操作的分类 一般来说,DOM操作分为3个方面,即DOM Core(核心)、HTML-DOM和CSS-DOM。 1. DOM Core DOM Core并不专属于javascript,任何一种支持DOM的程序设计语言都可以使用它。它的用途并非仅限于处理网页,也可以用来处理任何一种使用标记语言编写出来的文档,如XM...

使用zTree插件构建树形菜单

zTree下载:https://github.com/zTree/zTree_v3 目录: 就我看来,zTree较为实用的有以下几点: zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。 支持 JSON 数据 支持静态 和 Ajax 异步加载节点数据 支持任意更换皮肤 / 自...

转:Emmet 学习之路

http://blog.csdn.net/jizhongchun/article/details/8472755 导读:Emmet的基本语法。学习步骤是:1 基本语法; 2 html命令; 3 css命令; 4 xsl命令; 5 自定义snippets.json。 详细: Emmet针对html,键入命令都是基于html的tags。命令输入完成后,光标停在...

关于圆角的实现以及鼠标移入显示二级菜单的兼容处理!

在这时碰到了一个圆角边框的问题,以前的代码是在每个页面写一个固定结构的div,使用背景图片来实现圆角边框。代码结构大致如下: .top_border{background:url(topborder.png);} .left_border{background:url(leftborder.png);} .right_border{background:u...