Django實現顯示最「熱」文章

2021-09-06 03:05:40 字數 1412 閱讀 7037

一 編寫檢視函式

# 沒有登入的使用者也可以訪問這個函式

def article_detail(request, id, slug):

article = get_object_or_404(articlepost, id=id, slug=slug)

# 一般通過「物件型別:物件id:物件屬性」來命名乙個鍵

total_views = r.incr("article:{}:views".format(article.id))

# zincrby的原型是zincrby(name,amount,value):根據amount所設定的步長值增加有序集合(name)中的value的數值

# 實現了article_ranking中的article.id以步長1自增,

# 即文章訪問一次,article_ranking就將文章id的值增1

r.zincrby('article_ranking', 1,article.id)

# 得到article_ranking中排序前10名物件

article_ranking = r.zrange('article_ranking', 0, -1, desc=true)[:10]

print(article_ranking)

# 得到前10名文章id

article_ranking_ids = [int(id) for id in article_ranking]

print(article_ranking_ids)

# 查詢出id在article_ranking_ids這個範圍內的所有文章物件,並以文章物件為元素生成列表

most_viewed = list(articlepost.objects.filter(id__in=article_ranking_ids))

print(most_viewed)

# 對所得到的列表進行排序

most_viewed.sort(key=lambda x: article_ranking_ids.index(x.id))

# 將訪問次數傳遞給模板,將最受歡迎文章列表傳遞給前端

return render(request, "article/list/article_detail.html",

)

二 編寫前端模板

}}

}like}

}view}

like

unlike

點讚本文的讀者

}還沒有人對此文章表態

}

三 測試

Django實現文章標題列表

一 檢視函式實現 login required login url account login def article list request 篩選出使用者的所有文章物件,並將該物件渲染給模板 articles articlepost.objects.filter author request.u...

Django的分頁顯示實現

django中提供了乙個類paginator專門用來管理和處理分頁資料,所以我們在使用之前先導入好相應的類,另外這裡我們也匯入了待會會用到的處理異常的兩個類emptypage和pagenotaninteger from django.core.paginator import paginator,e...

Django 實現web分頁顯示

從資料庫取出資料,根據事先定義的每頁顯示的數量,進行分頁計算,得到頁數,構造html,返回給前端解析顯示。大致分為兩種 def page student list request,page page int page start num page 1 10 end num page 10 db st...