摘要: 主頁面的搭建(導航條下麵的區域) 個人站點 側邊欄分類展示 側邊欄標簽展示 側邊欄日期歸檔 文章詳情頁 文章內容 文章點贊點踩 文章評論 側邊欄分類展示 側邊欄標簽展示 側邊欄日期歸檔 文章內容 文章點贊點踩 文章評論 一、主頁面home.html的搭建(進一步完善) home.html頁面 ...
摘要:
- 主頁面的搭建(導航條下麵的區域)
- 個人站點
- 側邊欄分類展示
- 側邊欄標簽展示
- 側邊欄日期歸檔
- 文章詳情頁
- 文章內容
- 文章點贊點踩
- 文章評論
一、主頁面home.html的搭建(進一步完善)
home.html頁面主要框架描述:
①導航條(已經完成)
②主頁左側邊欄信息展示:分類、標簽、日期歸檔,右側邊欄信息展示:廣告...
③中間文章列表展示:文章標題、摘要、作者頭像顯示、創建日期,點贊數
第一步:先將主頁面的大致框架佈局搭出來:
(先佈局282,然後兩邊用bootstrap的面板來顯示兩邊信息佈局)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>主頁</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> </head> <body> <nav class="navbar navbar-default"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">BBS</a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li class="active"><a href="#">文章 <span class="sr-only">(current)</span></a></li> <li><a href="#">隨筆</a></li> </ul> <ul class="nav navbar-nav navbar-right"> {% if request.user.is_authenticated %} <li><a href="">歡迎您</a></li> <li><a href="#">{{ request.user.username }}</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">更多操作 <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="/set_password/">密碼修改</a></li> <li><a href="#">修改頭像</a></li> <li role="separator" class="divider"></li> <li><a href="/logout/">註銷</a></li> </ul> </li> {% else %} <li><a href="/login/">登錄</a></li> <li><a href="/register/">註冊</a></li> {% endif %} </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> <div class="container-fluid"> <div class="row"> # 左側信息欄占用2個柵格 <div class="col-md-2 col-sm-2 col-xs-3"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">堅持就是勝利</h3> </div> <div class="panel-body"> 一起加油! </div> </div> <div class="panel panel-info"> <div class="panel-heading"> <h3 class="panel-title">一點一滴</h3> </div> <div class="panel-body"> 一分一秒! </div> </div> <div class="panel panel-danger"> <div class="panel-heading"> <h3 class="panel-title">尋尋覓覓,冷冷清清,凄凄慘慘戚戚</h3> </div> <div class="panel-body"> 乍暖還寒時候,最難將息。三杯兩盞淡酒,怎敵他、晚來風急! </div> </div> </div> # 中間顯示文章相關信息占用10個柵格 <div class="col-md-8 col-sm-8 col-xs-6"> </div> # 右側信息欄占用2個柵格 <div class="col-md-2 col-sm-2 col-xs-3"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">堅持就是勝利</h3> </div> <div class="panel-body"> 一起加油! </div> </div> <div class="panel panel-info"> <div class="panel-heading"> <h3 class="panel-title">一點一滴</h3> </div> <div class="panel-body"> 一分一秒! </div> </div> <div class="panel panel-danger"> <div class="panel-heading"> <h3 class="panel-title">尋尋覓覓,冷冷清清,凄凄慘慘戚戚</h3> </div> <div class="panel-body"> 乍暖還寒時候,最難將息。三杯兩盞淡酒,怎敵他、晚來風急! </div> </div> </div> </div> </div> </body> </html>
第二步:使用Django admin後臺管理,快速導入相關文章信息
Django admin後臺管理相關設置:
① 必須是超級用戶才可以登錄後臺管理:在pycharm菜單欄Tools下,使用Run manage.py Task..,以命令行形式:createsuperuser來創建超級管理員用戶
② 需要將需要操作的模型表(models.py)全部都註冊到對應的應用名(app01)下的admin.py文件中
app01下admin.py文件中:
from django.contrib import admin from app01 import models # Register your models here. # 註冊順序沒有關係,主要註冊即可 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.Article2Tag) admin.site.register(models.UpAndDown) admin.site.register(models.Comment)
這裡說個小知識點:上圖黑框部分表明都是英文,不方便查看,可以設置成中文:
在models.py文件中:UserInfo類下麵添加代碼:(其它表同理改之)
class Meta: verbose_name_plural = '用戶表' # verbose_name = '用戶表' # 用這個預設會在用戶名後面加個s尾碼,不建議使用
註意別忘了資料庫遷移命令,讓其生效
③ 通過Django administration為文章表添加文章信息:
文章添加完成會發現一個問題:
解決方法:models.py文件:UserInfo表的類下麵添加:其它表的顯示同設置即可
def __str__(self): return self.title
強調一下:設置用戶表進行博客站點的關聯:(點擊進入用戶表>>>點擊需要關聯博客站點的用戶名>>>最下麵設置:)
第三步:將文章信息渲染到主頁面,同時添加文章下方相關信息的展示(作者、發佈時間、評論數、點贊數)
信息錄入完成,後開始渲染頁面:(使用bootstrap組件中的媒體對象列表模板,實現博客園類似文章顯示效果)
先查看頁面渲染效果:
接下來詳細說說,用戶頭像如何顯示的操作:
我們知道:用戶在註冊時候頭像文件是單獨放在一個叫avatar的文件夾下麵:
我們知道:在Django中
網站的靜態文件都放在static文件夾下,並且需要在settings配置文件中進行添加代碼進行設置,所以:
用戶上傳的靜態文件也需要單獨放在另外一個文件夾(media文件夾)下
在media文件夾下再存放對應文件夾:
avatar文件夾(用戶上傳的頭像)
files文件夾(用戶上傳的文件)
biography文件夾(用戶上傳的簡歷文件)
......等等
所以在Django Web框架下的項目,如果想獲取到用戶上傳的頭像圖片文件,就需要進行相關設置:
我們需要做 件事:
第一件事:規定用戶上傳的文件都統一放在media文件夾下,settings文件中配置用戶上傳的文件存放位置
# 在settings.py文件添加代碼: MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 用戶上傳的文件會自動存放到該文件夾並且該文件夾不要你手動創建
只做第一件事用戶圖像亦然不會顯示:
第二件事:將media文件夾暴露給外界可以直接訪問
需要urls.py文件中開一個路由:
# 需要導入一個serve模塊: from django.views.static import serve from BBS01 import settings # 手動配置media文件路徑(暴露media文件夾內容) url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT})
此時media文件夾就暴露給外界,我們再在home頁面重新修改一下img頭像src路徑
home.html頁面文件內容:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>主頁</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"> <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script> </head> <body> <nav class="navbar navbar-default"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">BBS</a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li class="active"><a href="#">文章 <span class="sr-only">(current)</span></a></li> <li><a href="#">隨筆</a></li> </ul> <ul class="nav navbar-nav navbar-right"> {% if request.user.is_authenticated %} <li><a href="">歡迎您</a></li> <li><a href="#">{{ request.user.username }}</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">更多操作 <span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="/set_password/">密碼修改</a></li> <li><a href="#">修改頭像</a></li> <li role="separator" class="divider"></li> <li><a href="/logout/">註銷</a></li> </ul> </li> {% else %} <li><a href="/login/">登錄</a></li> <li><a href="/register/">註冊</a></li> {% endif %} </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> <div class="container-fluid"> <div class="row"> {# 左側信息欄占用2個柵格#} <div class="col-md-2 col-sm-2 col-xs-3"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">堅持就是勝利</h3> </div> <div class="panel-body"> 一起加油! </div> </div> <div class="panel panel-info"> <div class="panel-heading"> <h3 class="panel-title">一點一滴</h3> </div> <div class="panel-body"> 一分一秒! </div> </div> <div class="panel panel-danger"> <div class="panel-heading"> <h3 class="panel-title">尋尋覓覓,冷冷清清,凄凄慘慘戚戚</h3> </div> <div class="panel-body"> 乍暖還寒時候,最難將息。三杯兩盞淡酒,怎敵他、晚來風急!雁過也,正傷心,卻是舊時相識。 滿地黃花堆積,憔悴損,如今有誰堪摘!守著窗兒,獨自怎生得黑!梧桐更兼細雨,到黃昏、點點滴滴。這次第,怎一個愁字了得! </div> </div> </div> {# 中間顯示文章相關信息占用10個柵格#} <div class="col-md-8 col-sm-8 col-xs-6"> {% for article in article_list %} <ul class="media-list"> <li class="media"> <h4 class="media-heading"><a href="">{{ article.title }}</a></h4> <div class="media-left"> <a href="#"> <img class="media-object img-thumbnail" src="/media/{{ article.blog.userinfo.avatar }}" width="80"> </a> </div> <div class="media-body"> {{ article.desc }} </div> </li> </ul> {# Pykk2019 發佈於 2019-06-21 評論(0)點贊(71)#} <span><a href="">{{ article.blog.userinfo.username }}</a></span> <span> 發佈於 </span> <span>{{ article.create_time|date:"Y-m-d" }} </span> <span class="glyphicon glyphicon-comment">評論({{ article.comment_num }})</span> <span class="glyphicon glyphicon-thumbs-up">點贊({{ article.up_num }})</span> <hr> {% endfor %} </div> {# 右側信息欄占用2個柵格#} <div class