格式化django中的电话号码

时间:2012-02-19 23:36:36

标签: django django-models

我的问题更容易通过一个例子来解释:

我的电话号码存储在我的数据库中,作为一串数字。让我们看看该领域被称为电话,它位于一个名为Business的模型中。

因此,要在模板中打印电话号码,在视图中创建business var之后我会使用:

{{ business.phone }}

这将显示数字字符串,如2125476321

打印这个电话号码的最佳方法是什么,如(212)547-6321?我可以在模型中使用任何方法吗?

1 个答案:

答案 0 :(得分:11)

如果phonenumbers的格式没有改变,你可以编写自己的函数来格式化phonenumber(参见this)。更好的方法是使用第三方库为您完成,例如python-phonenumbers。最简单的方法是做这样的事情:

import phonenumbers
class Business(models.Model):
    phone = ...

    def formatted_phone(self, country=None):
        return phonenumbers.parse(self.phone, country)
模板中的

 # We can't pass parameters from the template so we have to hope that python-phonenumbers guesses correctly
 {{ business.formatted_phone }}

另外(或同时)write a custom template filter格式化电话号码。它看起来像是:

{{ business.phone|phonenumber }} or {{ business.phone|phonenumber:"GB" }} 

并写道:

import phonenumbers
@register.filter(name='phonenumber')
def phonenumber(value, country=None):
   return phonenumbers.parse(value, country)

如果您只想在模板中使用格式,请编写模板过滤器。如果您认为在应用程序的其他方面需要格式化,例如在管理员中列出phonenumbers时,请将其写入模型中(但无法将参数传递给函数)