- Django NBA Web开发 - Step 14 球队数据信
- Django NBA Web开发 - Step 2 球队页面
- Django NBA Web开发 - Step 16 Djang
- Django NBA Web开发 - Step 17 Djang
- Django NBA Web开发 - Step 7 文章分页
- Django NBA Web开发 - Step 10 头像上传
- Django NBA Web开发 - Step 9 添加Ajax
- Django NBA Web开发 - Step 13 球员名单
- Django NBA Web开发 - Step 1 首页建立
- Django NBA Web开发 - Step 3 用户系统
之前球员名单算是添加了进去,然后想做为以后的球队/球员数据分析做一些基础。
所以去下载了一份球队数据 2018-2019 常规赛球队总数据。
1:建立模型
首先我创建了一个新的app,名字为stats.
然后在其中的models里面创建了模型Team_Season_Regular
class Team_Season_Regular(models.Model):
id = models.AutoField(primary_key=True)
rank = models.IntegerField('Rank',default=0,)
team = models.CharField('Team',max_length=50)
games = models.IntegerField('G',default=0)
MP = models.IntegerField('MP',default=0)
FG = models.IntegerField('FG',default=0)
FGA = models.IntegerField('FGA',default=0)
FGP = models.FloatField('FG%',default=0)
ThreeP = models.IntegerField('3P',default=0)
ThreePA = models.IntegerField('3PA',default=0)
ThreePP = models.FloatField('3P%',default=0)
TwoP = models.IntegerField('2P',default=0)
TwoPA = models.IntegerField('2PA',default=0)
TwoPP = models.FloatField('2P%',default=0)
FT = models.IntegerField('FT',default=0)
FTA = models.IntegerField('FTA',default=0)
FTP = models.FloatField('FT%',default=0)
ORB = models.IntegerField('ORB',default=0)
DRB = models.IntegerField('DRB',default=0)
TRB = models.IntegerField('TRB',default=0)
AST = models.IntegerField('AST',default=0)
STL = models.IntegerField('STL',default=0)
BLK = models.IntegerField('BLK',default=0)
TOV = models.IntegerField('TOV',default=0)
PF = models.IntegerField('PF',default=0)
PTS = models.IntegerField('PTS',default=0)
Season = models.IntegerField('Season',default=0)
2:创建url路由
app_name = 'stats'
urlpatterns=[
path('team_regular',team_regular,name='team_regular'),
]
3:创建views函数
def team_regular(request,**kwargs):
#取出对象的值得集合,对象是一个valuequeryset
teams = Team_Season_Regular.objects.values()
#遍历每个实例对象
for i in teams:
#将几个命中率的数据转换成百分比
i['FGP'] = '{:.2f}%'.format(i['FGP']*100)
i['ThreePP'] = '{:.2f}%'.format(i['ThreePP']*100)
i['TwoPP'] = '{:.2f}%'.format(i['TwoPP'] * 100)
i['FTP'] = '{:.2f}%'.format(i['FTP'] * 100)
#取得模型的字段名提供给前端,并忽略第一个和最后一个
field_names = Team_Season_Regular._meta.fields[1:-1]
return render(request,'team_regular.html',locals())
其中teams是一个valuequeryset的结果,里面是一个列表,每个元素是一个一个实例对象的所有值,而且这个元素是一个字典形式,
键为字段名
,值为实例数值.
接着用i来遍历teams,并通过访问键来修改值得内容,因为原始数据里面,各项投篮命中率都是小于1的小数,而我想在面板上显示成百分比.
3:前端渲染
{% block content %}
<div id="table_regular_whole_area">
<table id="table_regular" class="table-striped">
<tr id="table_head_area">
{% for col in field_names %}
<td class ="team_regular_table">{{ col.verbose_name }}</td>
{% endfor %}
</tr>
<!--遍历出每个球队实例-->
{% for team in teams %}
<!--每个实例创建一个row-->
<tr>
<!--取出每个实例字典中的"值"-->
{% for value in team.values %}
<!--去除第一个和最后一个数值,不需要id和赛季信息-->
{% if forloop.first or forloop.last %}
{% else %}
<!--横向创建出所有数据-->
<td class="team_regular_table">
{{ value }}
</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
{% endblock %}
4:前端优化
其实在做前端的时候本来想无脑套bootstrap的,但是套了以后发现效果并不是很好,所以自己又单独写了一些css,挂在外面单独的文件里。
其中最主要的一个是给table加上了layout是fixed的属性。
这样的效果是什么?
就是表格的栅格,不会因为单元格内部的内容长短不一致而扭曲了。
而是会非常整齐的呈现表格了。
#table_regular {
table-layout:fixed;
}
网友评论