Форматирование номера телефона в django

мой вопрос проще объяснить на примере:

У меня есть номер телефона, хранящийся в моей базе данных в виде строки чисел. Позволяет sat, что поле называется телефоном, и оно находится внутри модели под названием Business.

Итак, чтобы напечатать номер телефона в шаблоне, после создания бизнес-var в представлении я бы использовал:

{{ business.phone }}

это отобразит строку чисел, таких как 2125476321

каков наилучший способ довольно распечатать этот телефон номер (212) 547-6321? Есть ли способ, что я могу использовать внутри модели?

1 ответов


если форматирование номеров телефонов не изменяется, вы можете написать свою собственную функцию для форматирования номера телефона (см. этой). Лучшим подходом было бы использовать стороннюю библиотеку, чтобы сделать это за вас, например 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 }}

как вариант (или по совместительству).написать пользовательский шаблон фильтра форматировать номер_телефона. Это будет выглядеть так:

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

и написано:

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

если вы собираетесь использовать только форматирование в шаблоне, напишите фильтр шаблона. Если вы считаете, что вам понадобится форматирование в других аспектах вашего приложения, например, при перечислении номеров телефонов в admin, напишите его в модели (но потеряете возможность передавать параметры функции)