歌曲搜索
音乐平台的每个网页顶部都设置了歌曲搜索功能,歌曲搜索框以网页表单的形式展示,并且以 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 *
():
request.method == :
searchs = Dynamic.objects.select_related().order_by().()[:]
kword = request.session.get(, )
kword:
songs = Song.objects.(Q(name__icontains=kword) | Q(singer=kword)).order_by().()
:
songs = Song.objects.order_by().()[:]
paginator = Paginator(songs, )
:
pages = paginator.page(page)
PageNotAnInteger:
pages = paginator.page()
EmptyPage:
pages = paginator.page(paginator.num_pages)
kword:
idList = Song.objects.(name__icontains=kword)
i idList:
dynamics = Dynamic.objects.(song_id=i.)

