我的問題是容易用一個例子來解釋:在Django格式化電話號碼
我保存在我的數據庫中的一串數字的電話號碼。讓我們坐在那場被稱爲手機,它是一個叫做商業模式裏面。
所以,打印在模板中的電話號碼,從而在視圖中的業務無功後,我會用:
{{ business.phone }}
這將顯示數字的字符串如2125476321
什麼以漂亮的打印像(212)547-6321這個電話號碼最好的方法?有什麼方法可以在模型中使用?
我的問題是容易用一個例子來解釋:在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