Django删除前导零

时间:2013-01-14 11:55:58

标签: python django

在Django模板中,如何从我正在显示的所有移动号码中删除第一个Zero。在Python中我试过这个但没有成功......

{% for object in data %}

   {{ object.mobile.lstrip('0') }}

{% endfor %}



views.py


def sms(request, incentive):
    objectQuerySet = Recipient.objects.filter(incentiveid=incentive)
    context = {'data':objectQuerySet}

    return render_to_response('smssend.html', context, context_instance=RequestContext(request))

5 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。

  • 编写自定义模板过滤器
  • 过滤用户输入并存储已剥离前导零的手机
  • 创建一个自定义对象@property返回移动设备,将零剥离(这个有点脏)
  • 在渲染模板之前进行清理

答案 1 :(得分:2)

我假设您需要在应用程序的其他位置使用类似的逻辑,那么为什么不在模型中添加方法来清理数据呢?以下代码假设您的移动字段是字符串。

class Recipient(models.Model):
    ...
    def mobile_no_zero(self):
        return self.mobile[1:] if self.mobile.startswith('0') else self.mobile

然后您可以从模板中调用该方法:

{% for object in data %}

   {{ object.mobile_no_zero }}

{% endfor %}

答案 2 :(得分:1)

您应该以正确的格式将数据传递到模板。 Django模板不像PHP那样“穿插HTML”。

例如,当您第一次在视图中传递data时,应该确保它是一个已经剥离的零的迭代。

Django模板迷你语言中没有lstrip

编辑:如果你知道第一个数字总是0,你也可以这样做:

{{ object|slice:"1:" }}

答案 3 :(得分:0)

有一种方法可以正常工作(但更多的是kludge,任何东西,并删除0或更多0 s) - 并且只有当数字可以转换为浮动开始时(即,没有空格)

In [23]: t = Template('{{ value|floatformat:0 }}')

In [24]: t.render(Context({'value': '00123'}))
Out[24]: u'123'

答案 4 :(得分:-1)

您可以使用剪切(它将从数字中删除所有零)

或者您可以使用

phone2numeric Imo它的beter选择