2012-02-19 150 views
6

我的問題是容易用一個例子來解釋:在Django格式化電話號碼

我保存在我的數據庫中的一串數字的電話號碼。讓我們坐在那場被稱爲手機,它是一個叫做商業模式裏面。

所以,打印在模板中的電話號碼,從而在視圖中的業務無功後,我會用:

{{ business.phone }} 

這將顯示數字的字符串如2125476321

什麼以漂亮的打印像(212)547-6321這個電話號碼最好的方法?有什麼方法可以在模型中使用?

+3

我認爲冠軍這個問題頗具誤導性。 「格式化電話號碼」或類似的東西可能更合適 – 2012-02-20 00:20:28

回答

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格式化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