[英]Remove leading zeros in Django
我正在显示来自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 %}
您可以使用
def batting_avg_format(num):
numstr = str(num)
if numstr[0]!='0':
return numstr
else:
return numstr[1:]
可以将其作为您的BattingRegStd
模型的一种方法并应用它,或者在过滤模型之后但呈现HTML之前直接进行列表理解。 将其合并为模型方法的优点是,现在您可以从模板中调用它,只要方法中的唯一参数是self
。
您可以在经过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模板中执行此操作,但是您可以在视图中执行此操作(可能很难看,具体取决于您的操作方式提取此数据)或在简单的自定义模板过滤器中 。
我假设该值大于零。
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:"}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.