前端代碼:和首頁(yè)文章展示基本一樣:
創(chuàng)新互聯(lián)公司服務(wù)電話:18982081108,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)公司網(wǎng)頁(yè)制作領(lǐng)域十年,包括成都餐廳設(shè)計(jì)等多個(gè)方面擁有多年的網(wǎng)站推廣經(jīng)驗(yàn),選擇創(chuàng)新互聯(lián)公司,為網(wǎng)站錦上添花!
{% for article in article_list %}
-
{{ article.title }}
{{ article.desc }}
{{ article.blog.userinfo.username }}
發(fā)布于:{{ article.create_time|date:'Y-m-d' }}
點(diǎn)贊數(shù):({{ article.up_num }})
評(píng)論數(shù):({{ article.comment_num }})
{% endfor %}
后端代碼:在url中需要手動(dòng)輸入不同的用戶名,所以需要視圖函數(shù)需要輸入?yún)?shù)username
def site(request,username):
# 1.先查出手動(dòng)輸入的username對(duì)應(yīng)的用戶對(duì)象
user_obj = models.UserInfo.objects.filter(username=username).first()
# 2.如果輸入的用戶名不存在,則報(bào)錯(cuò)跳轉(zhuǎn)404頁(yè)面
if not user_obj:
return render(request,'error.html')
# 3.查詢出個(gè)人用戶對(duì)應(yīng)的個(gè)人站點(diǎn)
blog = user_obj.blog
# 4.根據(jù)個(gè)人站點(diǎn)查出對(duì)應(yīng)的文章
article_list = models.Article.objects.filter(blog=blog)
return render(request,'site.html',locals())
補(bǔ)充小知識(shí)點(diǎn):個(gè)人站點(diǎn)樣式搭建
對(duì)于不同個(gè)人站點(diǎn)需要不同樣式時(shí),我們可以在media文件夾下新建一個(gè)css文件夾,里面可以存放用戶上傳的不同css文件,再在個(gè)人站點(diǎn)html頁(yè)面下面添加對(duì)應(yīng)站點(diǎn)的css文件!!
側(cè)邊欄展示了三大版塊,分別是:文章分類、文章標(biāo)簽、日期歸檔!
文章分類和文章標(biāo)簽的書寫和渲染,只要將其在后端對(duì)應(yīng)查詢出來,如何傳入前端頁(yè)面,交給模板頁(yè)面渲染即可!
后端:
# 5.側(cè)邊欄數(shù)據(jù)傳入
# (1)查詢出當(dāng)前用戶所有的分類及分類下的文章數(shù)
category_list = models.Category.objects.filter(blog=blog).annotate(count_num=Count('article__pk')).values_list('name','count_num')
# print(category_list) 格式為:
# (2)查詢出當(dāng)前用戶的所有標(biāo)簽和標(biāo)簽下的文章數(shù)
tag_list = models.Tag.objects.filter(blog=blog).annotate(count_num=Count('article__pk')).values_list('name','count_num')
# print(tag_list) 格式為:
前端:
文章分類
{% for category in category_list %}
{% endfor %}
關(guān)于日期歸檔版塊的渲染:
我們?cè)趧?chuàng)建文章的時(shí)候,create_time字段是包含年月日時(shí)分秒的,而我們進(jìn)行日期歸檔的時(shí)候往往是按照年月進(jìn)行歸檔的!
所有,這時(shí)候就需要用到django官方提供的一個(gè)TruncMonth模塊
它的功能是能夠幫您在生成一個(gè)臨時(shí)的查詢表,新增了一個(gè)年月的字段,如何按這個(gè)字段進(jìn)行分組查詢
from django.db.models.functions import TruncMonth
后端:
# (3)按照年月統(tǒng)計(jì)出當(dāng)前用戶所有的文章
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)
# 這句查詢語(yǔ)句的意思是先查出當(dāng)前用戶,然后利用TruncMonth對(duì)create_time進(jìn)行過濾新增一個(gè)month年月字段,然后.values按照month字段分組,統(tǒng)計(jì)出當(dāng)前文章的個(gè)數(shù),最后取值!
前端:
日期歸檔
{% for data in data_list %}
{% endfor %}