在Django格式化电话号码
我的问题是容易用一个例子来解释:在Django格式化电话号码
我保存在我的数据库中的一串数字的电话号码。让我们坐在那场被称为手机,它是一个叫做商业模式里面。
所以,打印在模板中的电话号码,从而在视图中的业务无功后,我会用:
{{ business.phone }}
这将显示数字的字符串如2125476321
什么以漂亮的打印像(212)547-6321这个电话号码最好的方法?有什么方法可以在模型中使用?
如果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时,在模型中写入(但输给参数传递给函数的能力)
这实际上并没有格式化你的号码,你是不是更好的写作类似的:返回phonenumbers.format_number(phonenumbers.parse(价值,国家),PHONENUMBERS。 PhoneNumberFormat.NATIONAL) – tsurantino 2013-08-17 07:35:53
我认为冠军这个问题颇具误导性。 “格式化电话号码”或类似的东西可能更合适 – 2012-02-20 00:20:28