歌曲搜索
音乐平台的每个网页顶部都设置了歌曲搜索功能,歌曲搜索框以网页表单的形式展示,并且以POST请求方式实现歌曲搜索功能,搜索结果显示在歌曲搜索页。歌曲搜索页由项目应用search实现,首先在search的urls.py中定义路由search。
总路由定义
from django.conf import settings
from django.contrib import admin
from django.urls import path, include, re_path
from django.views.static import serve
urlpatterns = [
path('admin/', admin.site.urls),
path('search/', include('search.urls')),
re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]
搜索路由定义
from django.urls import path
from .views import *
urlpatterns = [
path('<int:page>.html', searchView, name='search'),
]
路由search设置了路由变量page,该变量代表某一页的页数,因为歌曲的搜索结果具有不确定性,通过对搜索结果进行分页处理可以美化和规范网页内容。路由的HTTP请求由视图函数searchView负责接收和处理,在search的views.py中定义视图函数searchView。
视图定义
from django.shortcuts import render, redirect
from django.core.paginator import Paginator
from django.core.paginator import EmptyPage
from django.core.paginator import PageNotAnInteger
from django.shortcuts import reverse
from django.db.models import Q, F
from index.models import *
def searchView(request, page):
if request.method == 'GET':
# 热搜歌曲
searchs = Dynamic.objects.select_related('song').order_by('-search').all()[:6]
# 获取搜索内容,如果kword为空,就查询全部歌曲
kword = request.session.get('kword', '')
if kword:
songs = Song.objects.filter(Q(name__icontains=kword) | Q(singer=kword)).order_by('-release').all()
else:
songs = Song.objects.order_by('-release').all()[:50]
# 分页功能
paginator = Paginator(songs, 5)
try:
pages = paginator.page(page)
except PageNotAnInteger:
pages = paginator.page(1)
except EmptyPage:
pages = paginator.page(paginator.num_pages)
# 添加歌曲搜索次数
if kword:
idList = Song.objects.filter(name__icontains=kword)
Django实现音乐平台歌曲搜索功能及分页

最低0.47元/天 解锁文章
2019

被折叠的 条评论
为什么被折叠?



