個人站點頁面搭建和側邊欄展示功能

来源:https://www.cnblogs.com/suncolor/archive/2022/10/08/16769347.html
-Advertisement-
Play Games

展示個人站點頁面 前端代碼:和首頁文章展示基本一樣: <div class="col-md-8"> {% for article in article_list %} <ul class="media-list"> <li class="media"> <a href=""><h4 class="m ...


展示個人站點頁面

前端代碼:和首頁文章展示基本一樣:

<div class="col-md-8">
            {% for article in article_list %}
                <ul class="media-list">
                    <li class="media">
                        <a href=""><h4 class="media-heading">{{ article.title }}</h4></a>
                        <div class="media-left">
                            <a href="#">
                                <img class="media-object" src="/media/{{ article.blog.userinfo.avatar }}/" alt="..." width="60">
                            </a>
                        </div>
                        <div class="media-body">
                            {{ article.desc }}
                        </div>
                        <br>
                        <div class="pull-right">
                            <span><a href="">{{ article.blog.userinfo.username }}</a></span>&nbsp;
                            <span>發佈於:{{ article.create_time|date:'Y-m-d' }}</span>&nbsp;
                            <span class="glyphicon glyphicon-thumbs-up">點贊數:({{ article.up_num }})</span>&nbsp;
                            <span class="glyphicon glyphicon-comment">評論數:({{ article.comment_num }})</span>&nbsp;
                        </div>
                    </li>
                </ul>
                <br>
            {% endfor %}
        </div>

後端代碼:在url中需要手動輸入不同的用戶名,所以需要視圖函數需要輸入參數username

def site(request,username):
    # 1.先查出手動輸入的username對應的用戶對象
    user_obj = models.UserInfo.objects.filter(username=username).first()
    # 2.如果輸入的用戶名不存在,則報錯跳轉404頁面
    if not user_obj:
        return render(request,'error.html')
    # 3.查詢出個人用戶對應的個人站點
    blog = user_obj.blog
    # 4.根據個人站點查出對應的文章
    article_list = models.Article.objects.filter(blog=blog)
    return render(request,'site.html',locals())

側邊欄展示功能

補充小知識點:個人站點樣式搭建

對於不同個人站點需要不同樣式時,我們可以在media文件夾下新建一個css文件夾,裡面可以存放用戶上傳的不同css文件,再在個人站點html頁面下麵添加對應站點的css文件!!
<link rel="stylesheet" href="/media/css/{{ user_obj.username }}.css">

側邊欄展示了三大版塊,分別是:文章分類、文章標簽、日期歸檔!

文章分類和文章標簽的書寫和渲染,只要將其在後端對應查詢出來,如何傳入前端頁面,交給模板頁面渲染即可!
後端:

    # 5.側邊欄數據傳入
    # (1)查詢出當前用戶所有的分類及分類下的文章數
    category_list = models.Category.objects.filter(blog=blog).annotate(count_num=Count('article__pk')).values_list('name','count_num')
    # print(category_list)  格式為:<QuerySet [('zhang的分類1', 2), ('zhang的分類2', 1), ('zhang的分類3', 2)]>
    # (2)查詢出當前用戶的所有標簽和標簽下的文章數
    tag_list = models.Tag.objects.filter(blog=blog).annotate(count_num=Count('article__pk')).values_list('name','count_num')
    # print(tag_list) 格式為:<QuerySet [('zhang的標簽1', 3), ('zhang的標簽2', 2), ('zhang的標簽3', 2)]>

前端:

            <div class="panel panel-primary">
                <div class="panel-heading">
                    <h3 class="panel-title">文章分類</h3>
                </div>
                <div class="panel-body">
                    {% for category in category_list %}
                        <p><a href="">{{ category.0 }}({{ category.1 }})</a></p>
                    {% endfor %}
                </div>
            </div>

關於日期歸檔版塊的渲染:

我們在創建文章的時候,create_time欄位是包含年月日時分秒的,而我們進行日期歸檔的時候往往是按照年月進行歸檔的!

所有,這時候就需要用到django官方提供的一個TruncMonth模塊

它的功能是能夠幫您在生成一個臨時的查詢表,新增了一個年月的欄位,如何按這個欄位進行分組查詢

from django.db.models.functions import TruncMonth

後端:
    # (3)按照年月統計出當前用戶所有的文章
    data_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values('month').annotate(count_num=Count('pk')).values('month','count_num')
    # print(data_list)
# 這句查詢語句的意思是先查出當前用戶,然後利用TruncMonth對create_time進行過濾新增一個month年月欄位,然後.values按照month欄位分組,統計出當前文章的個數,最後取值!

前端:
            <div class="panel panel-info">
                <div class="panel-heading">
                    <h3 class="panel-title">日期歸檔</h3>
                </div>
                <div class="panel-body">
                    {% for data in data_list %}
                        <p><a href="">{{ data.month|date:'Y年m月' }}({{ data.count_num }})</a></p>
                    {% endfor %}
                </div>
            </div>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 位運算及進位轉換 1.1 標識符的命名規則和規範 1.1.1 標識符概念 Java對各種變數、方法和類等命名時使用的字元序列稱為標識符 凡是自己可以起名字的地方都叫做標識符 int num = 88; 1.1.2 標識符的命名規則 由26個英文字母大小寫,0-9,_或$組成 不可以以數字開頭。int ...
  • Python表白小程式。 python表白玫瑰花繪製 python表白玫瑰花繪製——情人節表白 python表白玫瑰花繪製——情人節表白 一、玫瑰花繪製—深紅色 二、玫瑰花繪製—五顏六色 三、玫瑰花繪製—粉紅色 四、玫瑰花繪製—紅色 五、桃花繪製 搬運不易,路過的各位大佬請點個贊 一、玫瑰花繪製—深 ...
  • PhantomReference虛引用 在分析堆外記憶體回收之前,先瞭解下PhantomReference虛引用。 PhantomReference需要與ReferenceQueue引用隊列結合使用,在GC進行垃圾回收的時候,如果發現一個對象只有虛引用在引用它,則認為該對象需要被回收,會將引用該對象的 ...
  • 面向對象和麵向過程的區別 面向過程性能更優一些,所以一般是使用在底層,例如,單片機、嵌入式開發 面向對象相對於面向過程效率較低,但是面向對象具有繼承封裝多態的特性使得面向對象的程式易維護,易擴展,易復用 多態是如何實現的 介面和抽象類的區別 設計層面 抽象是對類的抽象,是一種模板設計 介面是對行為的 ...
  • url的設計 /usrname/article/1 /用戶名/article/文章主鍵值 re_path(r'^(?P<username>\w+)/article/(?P<article_id>\d+)/$',views.article_detail,name='detail'), 視圖函數的設計 ...
  • 在驅動開發中我們有時需要得到驅動自身是否被載入成功的狀態,這個功能看似沒啥用實際上在某些特殊場景中還是需要的,如下代碼實現了判斷當前驅動是否載入成功,如果載入成功, 則輸出該驅動的詳細路徑信息。 ...
  • 2022-10-08 過濾器 過濾器的含義: 過濾器即篩選出我們設定需要的,過濾掉我們不需要的數據。 過濾器使用的場景: 例如:在子應用的“views.py”中的一個類中的函數設置了一個請求在瀏覽器頁面顯示“組織內容”,例如:在“組織內容”中設置了一個“birthday:datatime.now() ...
  • 實驗介紹 使用所學知識拆除Binary Bombs來增強對程式的機器級表示、彙編語言、調試器和逆向工程等理解。 Binary Bombs(二進位炸彈)是一個可執行程式,是C語言編譯鏈接成的,包含phase1~phase6共6個階段(還有隱藏階段)。 各階段要求輸入一個答案,若正確,該階段炸彈被拆除, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...