2012-02-19 17 views
6

Soruma bir soru ile açıklamak daha kolay:django içinde bir telefon numarasını biçimlendirme

Veritabanımda bir sayı dizisi olarak saklanan bir telefon numaram var. Alana telefon denir ve iş denilen bir modelin içinde yer alır.

Yani, bir şablonda telefon numarasını yazdırmak için, görünümde iş Var oluşturduktan sonra ben kullanırım:

{{ business.phone }} 

Bu 2125476321

gibi sayıların dizesini görüntüler nedir Bu telefon numarasını basmanın en iyi yolu (212) 547-6321? Modelde kullanabileceğim herhangi bir yöntem var mı?

+3

Bu soru oldukça yanıltıcıdır. "Bir telefon numarasını biçimlendirme" ya da benzer bir şey daha uygun olabilir –

cevap

11

Telefon numaralarının biçimlendirmesi değişmezse, telefon numarasını biçimlendirmek için kendi işlevinizi yazabilirsiniz (bkz. this). Daha iyi bir yaklaşım, sizin için python-phonenumbers gibi bir 3. parti kütüphanesi kullanmak olacaktır. telefonu numarasını biçimlendirmek için şablonda (eşzamanlı veya)

# We can't pass parameters from the template so we have to hope that python-phonenumbers guesses correctly 
{{ business.formatted_phone }} 

Alternatifwrite a custom template filter yılında

import phonenumbers 
class Business(models.Model): 
    phone = ... 

    def formatted_phone(self, country=None): 
     return phonenumbers.parse(self.phone, country) 

: kolay yaklaşım böyle bir şey yapmaktır.

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

yalnızca şablon filtresi yazma, şablonda biçimlendirmeyi kullanmak için kullanacaksanız:

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

ve yazılı: gibi görünürdü. Uygulamanızın diğer yönlerinde biçimlendirmeye ihtiyacınız olacağını düşünüyorsanız, örneğin yöneticideki telefon numaralarını listelerken, modele yazın (ancak parametrelere işlevi geçirme yeteneğini kaybedin)

+6

Bu sizin için sayıyı biçimlendirmez ve sizin gibi bir şey yazmaktan daha iyidir: return phonenumbers.format_number (phonenumbers.parse (value, country), phonenumbers. PhoneNumberFormat.NATIONAL) – tsurantino

İlgili konular