stefanfoulis/django-phonenumber-field 模板中电话号码的显示格式

Posted

技术标签:

【中文标题】stefanfoulis/django-phonenumber-field 模板中电话号码的显示格式【英文标题】:stefanfoulis/django-phonenumber-field display format of phone number in template 【发布时间】:2020-06-21 13:41:24 【问题描述】:

我试图弄清楚如何使用 stefanfoulis/django-phonenumber-field 显示电话号码。我安装了 stefanfoulis/django-phonenumber-field[phonenumberslite]。在我的设置文件中,我有:

PHONENUMBER_DB_FORMAT = "NATIONAL"
PHONENUMBER_DEFAULT_REGION = "US"

在我的模型中,我有:

phone_number = PhoneNumberField(blank=True)

在我的表格中,我有:

phone_number = PhoneNumberField(max_length=25,required=False)

在我的模板中我有:

 myform.phone_number 

我可以输入多种格式的电话号码(831-555-5555、831-555-5555、831.555.5555),并在数据库中正确存储为 +18315555555。

但是当我在模板中使用表单域时,它总是显示为 +18315555555。我希望它显示为 831-555-5555 或 (831) 555-5555。如何在我的模板中以其中一种格式显示电话号码?有标签修饰符吗?

更新:事实证明,我在表单 init 方法中设置了表单字段的初始值,我需要将其设置为 as_national。现在设置为 (831) 555-5555。

【问题讨论】:

obj.phone.as_national 您的问题是关于呈现 表单字段(在表单中)还是关于在表单之外呈现数字本身? 就是在表单中渲染表单域。 myform 是表单,phone_number 在我的表单中定义为 phone_number = PhoneNumberField(max_length=25,required=False)。用于输入电话号码的文本字段显示号码,但显示为 +18315555555。 我不确定您所说的“将表单初始化方法中的表单字段的初始值设置为 as_national”是什么意思。您是否愿意为自己的问题提供答案以帮助他人? 【参考方案1】:

由于您的表单覆盖了字段,因此您需要重新定义区域。或者,您可以删除表单中 phone_number 的显式定义。

phone_number = PhoneNumberField(max_length=25, required=False, region="US")

【讨论】:

我的表单不是 ModelForm,而是 form.Form,所以我自己定义所有字段。我已将 phone_number 更改为 phone_number = PhoneNumberField(max_length=25,required=False, region='US') 但模板仍然在文本框中显示表单字段电话号码,号码显示为 +18315555555。我希望它会显示在 831-555-5555 或 (831) 555-5555。以这两种格式输入电话号码都可以正常工作。【参考方案2】:

我有一个表单类

class UserForm(forms.Form):
    user_id = forms.IntegerField(required=False, widget=forms.HiddenInput())
    email = forms.EmailField(max_length=100,required=True)
    phone_number = PhoneNumberField(max_length=25,required=False)

    def __init__(self, userBeingEdited=None, *args, **kwargs):
        super(UserAdminForm, self).__init__(*args, **kwargs)
        if userBeingEdited != None:
            self.initial['user_id'] = userBeingEdited.id
            self.initial['email'] = userBeingEdited.email
            if userBeingEdited.phone_number != "":
                self.initial['phone_number'] = userBeingEdited.phone_number.as_national

我错误地没有在 __init__ 方法的最后一行包含 as_national 并且电话号码没有被格式化。

【讨论】:

以上是关于stefanfoulis/django-phonenumber-field 模板中电话号码的显示格式的主要内容,如果未能解决你的问题,请参考以下文章