Показать номер телефона в более удобочитаемом формате - PullRequest
0 голосов
/ 11 апреля 2020

Подскажите, пожалуйста, как правильно решить следующую проблему

В базе данных есть номер телефона. На сайте он отображается в том же виде, в котором он записан в базе данных

+1234567890

И мне нужно, чтобы этот номер выглядел так, на странице сайта без изменений в базе данных

+(123) 456-7890

views.py

def Data(request):
    card = Cards.objects.filter(is_published=True)
        context = {'card': card}
        return render(request, 'templates/cards.html', context)

models.py

phone = models.CharField(max_length=12, null=True)

карт. html

{{ card.phone }}

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Django не форматирует числа самостоятельно. Однако вы можете создать свою собственную функцию для этого. Попробуйте использовать python-phonenumbers ( ссылка ). Создайте еще одну функцию для этого в вашем models.py :

import phonenumbers

class Cards:
    phone = models.CharField(max_length=12, null=True)
    .....

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

А затем в вашем template:

{{ card.formatted_phone_number }}

NOTE: Вы не можете напрямую передавать параметры из вашего шаблона. Таким образом, функция должна заранее знать, какой формат страны вы будете использовать.

0 голосов
/ 11 апреля 2020

Вы можете написать эту вспомогательную функцию:

def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]

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

phone = insert_str(phone, '(', 1)
phone = insert_str(phone, '(', 5) # there's already an extra '('
phone = insert_str(phone, ' ', 6)
phone = insert_str(phone, '-', 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...