2012-02-19 5 views
6

に電話番号をフォーマットする私の質問は、例を挙げて説明する方が簡単です:はジャンゴ

私は数字の文字列として私のデータベースに保存されている電話番号を持っています。このフィールドは電話と呼ばれ、Businessというモデルの中にあります。

だから、私が使用するビューのビジネスVARを作成した後、テンプレート内で電話番号を印刷するには:

{{ business.phone }} 

をこれは何2125476321

のように数字の文字列を表示します。 (212)547-6321のようにこの電話番号をきれいに印刷するには?モデルの中で使用できる方法はありますか?

+3

タイトルはこの質問はかなり誤解を招く。 "電話番号を書式設定する"などの方が適切かもしれません –

答えて

11

電話番号の書式設定が変更されない場合は、電話番号をフォーマットする独自の関数を記述できます(thisを参照)。より良いアプローチは、python-phonenumbersなど、サードパーティのライブラリを使用してあなたのために行うことです。 PHONENUMBERをフォーマットする

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:最も簡単な方法は、このような何かを行うことです。あなたが唯一のテンプレートフィルタを書く、テンプレートの書式設定を使用しようとしている場合は

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

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

と書かれた:それは次のようになります。管理者に電話番号を表示するなど、アプリの他の側面で書式設定が必要だと思われる場合は、モデルに書いてください(ただし、関数にパラメータを渡すことはできません)

+6

これは実際にあなたのために番号を書いておらず、代わりにあなたのようなものを書いたほうがいいです:return phonenumbers.format_number(phonenumbers.parse(value、country)、phonenumbers。 PhoneNumberFormat.NATIONAL) – tsurantino