urls.py
from django.urls import path
from . import views
urlpatterns = [
path('',views.rankingView,name='ranking'),
##设置通用视图的url地址,url的处理由views中的RankingList执行
##as_view:
#根据请求方式的不同(post、get),来调用views.py文件中不同的方法
# (例如:post请求的话就调用redirect(),
# get请求的话就调用 render()。
path('.list',views,RankingList.as_view(),name=rankingList),
]
views.py
from django.shortcuts import render
# Create your views here.
from index.models import *
def rankingView(request):
##搜索歌曲
##通过歌曲的搜索次数进行降序查询,由Django内置的select_related方法实现模型Song和Dynamic的数据查询
search_song=Dynamic.objects.select_related('song').order_by('-dynamic_search').all[:4]
##歌曲分类列表
##对song_type distinct去重操作
All_list=Song.objects.values('song_type').distinct
##热门列表信息
##若GET请求为空,则对全部歌曲进行筛选,获取播放次数再前10的歌曲;
##若请求不问空则根据请求内容进行筛选,获取播放再前10的歌曲
song_type=request.GET.get('type','')
if song_type:
song_type=Dynamic.objects.select_related('song').filter(song_type=song_type).order_by('-dynamic_plays').all()[:10]
else:
song_info=Dynamic.objects.select_related('song').order_by('-dynamic_plays').all()[:10]
return render(request,'ranking.html',locals())
class RankingList(ListView):
##content_object_name设置HTML模版的某一个变量名称
content_object_name='song_info'
##设置模版文件
template_name = 'ranking.html'
##查询变量song_info的数据
def get_queryset(self):
##获取请求参数
song_type=self.request.GET.get('type','')
if song_type:
song_info=Dynamic.objects.select_related('song').filter(song__song_type=song_type).order_by('-dynamic_plays').all()[:10]
else:
song_info=Dynamic.objects.select_related('song').order_by('-dynamic_plays').all()[:10]
return song_info
##添加其他变量
def get_context_data(self, *, object_list=None, **kwargs):
##super()实例化get_context_data这个方法
context=super().get_context_data(**kwargs)
##搜索歌曲
context['search_song']=Dynamic.objects.select_related('song').order_by('-dynamic_search').all[:4]
##所有歌曲分类
context['All_list']=Song.objects.values('song_type').distinct()
return context