使用Python Django框架制作一个音乐网站,
本篇主要是歌手页-全部歌手页功能开发。
目录
把首页样式内容从基础样式文件中移动出来,独立创建index.css文件。

在idnex.html引入index.css文件,防止首页样式设置影响其他页面样式。
内容如下:
- {% extends 'common/base.html' %}
- {% load static %}
-
- {% block title %}我的音乐{% endblock title %}
-
- {% block content %}
- "stylesheet" href="{% static 'css/index.css' %}">
- "stylesheet" href="{% static 'css/swiper-bundle.min.css' %}">
在player/urls.py中在原有路由下增加新路由,并设置分页参数page。
path('singer/' , views.singer, name='singer'),
在player/views.py中创建歌手模块首页视图方法。
from django.core.paginator import Paginator
处理字母列表这个很简单。关键在于全部歌手列表,先获取歌手列表数据,然后通过分页组件处理成分页数据,最后返回给模板。
内容如下:
- def singer(request, page):
- """ 歌手列表 """
-
- # 字母列表
- letters = [chr(i) for i in range(ord('A'), ord('Z') + 1)]
-
- # 所有歌手列表
- singlerList = Singler.objects.all().order_by('-singe_num')
-
- # 实例化Paginator 每页显示24条
- paginator = Paginator(singlerList, 24)
- # 获取当前页码数据
- res = paginator.page(page)
-
- return render(request, 'singer/index.html', {
- 'letters': letters,
- 'singlerList': res
- })
在templates中创建singer文件夹,并在文件夹中创建index.html文件。
内容如下:
- {% extends 'common/base.html' %}
- {% load static %}
-
- {% block title %}我的音乐-歌手{% endblock title %}
-
- {% block content %}
- "stylesheet" href="{% static 'css/singer.css' %}">
- class="nav_list">
-
class="nav_1">
-
- class="active">"#" class="first">热门
- {% for lname in letters %}
- {% endfor %}
-
-
- class="singer_list">
- class="list_max">
- {% for item in singlerList %}
- {% if forloop.counter < 6 %}
- class="item">
- class="cover">
-
"/media/{{item.portrait}}" alt=""> -
-
class="num">{{item.singe_num}}首歌曲
-
- {% elif forloop.counter == 7 %}
- class="list_min">
- class="item">
- class="cover">
-
"/media/{{item.portrait}}" alt=""> -
-
- {% else %}
- class="item">
- class="cover">
-
"/media/{{item.portrait}}" alt=""> -
-
- {% endif %}
- {% endfor %}
-
-
- {% if list_num < 1 %}
- class="nodata flex_c">
- class="inner">
-
"{% static 'images/nodata.png' %}" - alt="" class="nodata_img">
- class="tip">
暂无相关数据
-
- {% endif %}
-
- {% if list_num > 1 %}
- class="page">
- class="li-page glyphicon glyphicon-menu-left notPointer">
-
- {% for index in singlerList.paginator.page_range %}
- {% if singlerList.number == index %}
- {% else %}
- {% endif %}
- {% endfor %}
-
- class="glyphicon glyphicon-menu-right li-page">
- {% endif %}
- {% endblock content %}
修改header.html文件中歌手跳转超链接。
内容如下:
<li><a href="javascript:void(0)" class="selected">歌手a>li>
想了想还是把导航条改为每个页面,而不是作为公共部分。
基础模板中去掉导航头,并把导航条内容移动到首页原内容之上。
内容如下:
- {% extends 'common/base.html' %}
- {% load static %}
-
- {% block title %}我的音乐{% endblock title %}
-
- {% block content %}
- <link rel="stylesheet" href="{% static 'css/index.css' %}">
- <link rel="stylesheet" href="{% static 'css/swiper-bundle.min.css' %}">
-
- <div class="header">
- <img src="{% static 'images/logo.png' %}" class="logo" alt="">
- <ul>
- <li><a href="javascript:void(0)" class="selected">推荐a>li>
- <li><a href="javascript:void(0)">排行榜a>li>
- <li><a href="{% url 'player:singer' 1 %}">歌手a>li>
- <li><a href="javascript:void(0)">单曲a>li>
- <li><a href="javascript:void(0)">歌单a>li>
- ul>
- div>
在分类筛选列表模块之上增加导航条。
内容如下:
- <div class="header">
- <img src="{% static 'images/logo.png' %}" class="logo" alt="">
- <ul>
- <li><a href="{% url 'player:index' %}">推荐a>li>
- <li><a href="javascript:void(0)">排行榜a>li>
- <li><a href="javascript:void(0)" class="selected">歌手a>li>
- <li><a href="javascript:void(0)">单曲a>li>
- <li><a href="javascript:void(0)">歌单a>li>
- ul>
- div>
全部歌手列表增加首字母筛选条件,下面就开始实现。
在原有分页参数后增加字母搜索参数。
path('singer/detail//' , views.singer_detail, name='singer_detail'),
增加name参数接收字母值,如果是#则获取所有歌手列表,其他字母查询相应歌手列表。
- def singer(request, page, name):
- """ 歌手列表 """
-
- # 字母列表
- letters = [chr(i) for i in range(ord('A'), ord('Z') + 1)]
-
- # 是否搜索首字母
- if name != '#':
- # 符合首字母的歌手列表
- singlerList = Singler.objects.filter(first_letter=name).order_by('-singe_num')
- else:
- # 所有歌手列表
- singlerList = Singler.objects.all().order_by('-singe_num')
-
- # 实例化Paginator 每页显示24条
- paginator = Paginator(singlerList, 24)
- # 获取当前页码数据
- res = paginator.page(page)
-
- return render(request, 'singer/index.html', {
- 'letters': letters,
- 'singlerList': res,
- 'list_num': len(singlerList)
- })
全部歌手页链接增加字母筛选条件。
- class="nav_list">
-
class="nav_1">
-
- class="active">"#" class="first">热门
- {% for lname in letters %}
- {% endfor %}
-
筛选无数据处理
在首页条件筛选无数据的情况处理,出现无数据提示,隐藏分页列表。
- {% if list_num < 1 %}
- class="nodata flex_c">
- class="inner">
-
"{% static 'images/nodata.png' %}" - alt="" class="nodata_img">
- class="tip">
暂无相关数据
-
- {% endif %}
-
- {% if list_num > 1 %}
- class="page">
- class="li-page glyphicon glyphicon-menu-left notPointer">
-
- {% for index in singlerList.paginator.page_range %}
- {% if singlerList.number == index %}
- {% else %}
- {% endif %}
- {% endfor %}
-
- class="glyphicon glyphicon-menu-right li-page">
- {% endif %}
修改歌手跳转链接
原有跳转歌手的链接需要添加参数,已经无法使用。
- "{% url 'player:singer' 1 '#' %}">歌手
总结
又来更新django音乐网站项目了, 最近一直比较忙,零零碎碎往前推进一点。
本篇主要是歌手页-全部歌手展示页面的开发,其中关键点在于分页和条件筛选的实现。