1

在 Django 模板中,如何从我显示的所有手机号码中删除第一个零。在 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))
4

5 回答 5

2

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

  • 编写自定义模板过滤器
  • 过滤用户输入并存储已去​​除前导零的电话
  • 创建一个自定义对象@property,返回带有零的移动设备(这个有点脏)
  • 在渲染模板之前进行清理
于 2013-01-14T12:15:45.827 回答
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 %}
于 2013-01-14T12:26:16.083 回答
1

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

例如,当您第一次将您data的视图传递给您时,您应该确保它是一个已去除零的可迭代对象。

lstripDjango 模板迷你语言中没有。

编辑:如果您知道第一个数字将始终为 0,您也可以这样做:

{{ object|slice:"1:" }}
于 2013-01-14T12:03:14.150 回答
0

有一种方法确实有效(但比任何东西都更复杂,并删除 0 或更多0s) -并且只有当数字可以转换为浮点数开始时(即没有空格)

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

In [24]: t.render(Context({'value': '00123'}))
Out[24]: u'123'
于 2013-01-14T12:31:17.097 回答
-1

您可以使用 cut (它将从 number 中删除所有零)

或者你可以使用

phone2numeric Imo 是更好的选择

于 2013-01-14T12:10:25.863 回答