我正在显示MySQL数据库中的数据。我想删除某些字段(ops
和obp
字段中的前导零),当小数点左侧的值为0时,仅仅。如果小数点左边的数字不为0,那么我显然希望显示该数字。
例如,
0.750变为.750
1.000保持不变
我怀疑这可以在使用Django模板或views.py中调用数据时完成。我该怎么办?
对此将大有帮助!谢谢。
views.py
from django.shortcuts import render
from .models import BattingRegStd
# Create your views here.
def batting(request):
battingregstd2018 = BattingRegStd.objects.filter(year=2018)
return render(request, 'playerstats/battingReg2018.html', {'battingregstd2018':battingregstd2018})
models.py
class BattingRegStd(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
obp = models.FloatField(db_column='OBP', blank=True, null=True) # Field name made lowercase.
ops = models.FloatField(db_column='OPS', blank=True, null=True) # Field name made lowercase.
tb = models.IntegerField(db_column='TB', blank=True, null=True) # Field name made lowercase.
HTML
{% extends "base.html" %}
{% block contents %}
<div>
<table>
<thead>
<tr>
<th>OBP</th>
<th>OPS</th>
<th>TB</th>
</tr>
</thead>
<tbody>
{% for index in battingregstd2018%}
<td>{{ index.obp}}</td>
<td>{{ index.ops}}</td>
<td>{{ index.tb}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
答案 0 :(得分:1)
您可以使用
def batting_avg_format(num):
numstr = str(num)
if numstr[0]!='0':
return numstr
else:
return numstr[1:]
可以将其作为方法BattingRegStd
上的模型并加以应用,或者在过滤模型之后但呈现HTML之前直接进行列表理解。将其合并为模型方法的优点是,只要方法中唯一的参数为self
,您现在就可以从模板中调用它。
答案 1 :(得分:0)
您可以在经过Python 3.5.3测试的Python shell中确认的示例:
x = "0.750"
x.lstrip("0")
> '.750'
# Included because a normal floating point type won't print trailing zeroes:
from decimal import Decimal
x = Decimal("0.750")
x.to_eng_string().lstrip("0")
> '.750'
str(x).lstrip("0")
> '.750'
虽然除非您已将引擎换成jinja2或其他允许方法调用中允许的内容,否则您将无法在Django模板中执行此操作,但是您可以在视图中执行此操作(可能很难看,具体取决于如何您要提取此数据),也可以使用简单的custom template filter。
答案 2 :(得分:0)
我认为该值大于零。
views.py
def batting(request):
battingregstd2018 = BattingRegStd.objects.filter(year=2018)
for i in range(0, len(battingregstd2018)):
# if need to edit value
if battingregstd2018[i].obp is not None and battingregstd2018[i].obp < 1:
# data edit as string
# data type does not matter in template
battingregstd2018[i].obp = str(battingregstd2018[i].obp)[1:]
if battingregstd2018[i].ops is not None and battingregstd2018[i].ops < 1:
battingregstd2018[i].ops = str(battingregstd2018[i].ops)[1:]
return render(request, 'playerstats/battingReg2018.html', {'battingregstd2018':battingregstd2018})
比第二次尝试
这次我们只修复模板。使用原始的view.py
{% for index in battingregstd2018%}
<td>
{% if index.obp is None %}
-
{% elif index.obp < 1 %}
.{{index.obp|slugify|slice:"1:"}}
{% else %}
{{index.obp}}
{% endif %}
</td>
{% endfor %}
.{{index.obp|slugify|slice:"1:"}}
|slice
仅可用于字符串数据类型。
|slugify
转换为ASCII以供使用|slice
。但小数点被删除。
所以我在前面加了.
。
ps)
也许,浮点类型会将0.750
存储为0.75
。如果您想0.750
而不是使用.{{index.obp|floatformat:"3"|slugify|slice:"1:"}}