簡體   English   中英

在Django中刪除前導零

[英]Remove leading zeros in Django

我正在顯示來自MySQL數據庫的數據。 我只想刪除某些字段( opsobp字段)中的前導零, 當小數點左側的值是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.7500.75 如果您要使用它而不是0.750 .{{index.obp|floatformat:"3"|slugify|slice:"1:"}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM