在Django格式化电话号码

问题描述:

我的问题是容易用一个例子来解释:在Django格式化电话号码

我保存在我的数据库中的一串数字的电话号码。让我们坐在那场被称为手机,它是一个叫做商业模式里面。

所以,打印在模板中的电话号码,从而在视图中的业务无功后,我会用:

{{ business.phone }} 

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

什么以漂亮的打印像(212)547-6321这个电话号码最好的方法?有什么方法可以在模型中使用?

+3

我认为冠军这个问题颇具误导性。 “格式化电话号码”或类似的东西可能更合适 – 2012-02-20 00:20:28

如果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格式化PHONENUMBER。它看起来像:

{{ 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时,在模型中写入(但输给参数传递给函数的能力)

+6

这实际上并没有格式化你的号码,你是不是更好的写作类似的:返回phonenumbers.format_number(phonenumbers.parse(价值,国家),PHONENUMBERS。 PhoneNumberFormat.NATIONAL) – tsurantino 2013-08-17 07:35:53