Skip to content

Commit

Permalink
Fixed #35601 -- Added TelInput widget.
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasEsposito authored and sarahboyce committed Aug 2, 2024
1 parent 946c3cf commit b478cae
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -624,6 +624,7 @@ answer newbie questions, and generally made Django that much better:
Lowe Thiderman <[email protected]>
Luan Pablo <[email protected]>
Lucas Connors <https://www.revolutiontech.ca/>
Lucas Esposito <[email protected]>
Luciano Ramalho
Lucidiot <[email protected]>
Ludvig Ericson <[email protected]>
Expand Down
1 change: 1 addition & 0 deletions django/forms/jinja2/django/forms/widgets/tel.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{% include "django/forms/widgets/input.html" %}
1 change: 1 addition & 0 deletions django/forms/templates/django/forms/widgets/tel.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{% include "django/forms/widgets/input.html" %}
6 changes: 6 additions & 0 deletions django/forms/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
"URLInput",
"ColorInput",
"SearchInput",
"TelInput",
"PasswordInput",
"HiddenInput",
"MultipleHiddenInput",
Expand Down Expand Up @@ -365,6 +366,11 @@ class SearchInput(Input):
template_name = "django/forms/widgets/search.html"


class TelInput(Input):
input_type = "tel"
template_name = "django/forms/widgets/tel.html"


class PasswordInput(Input):
input_type = "password"
template_name = "django/forms/widgets/password.html"
Expand Down
22 changes: 22 additions & 0 deletions docs/ref/forms/widgets.txt
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,28 @@ These widgets make use of the HTML elements ``input`` and ``textarea``.
* ``template_name``: ``'django/forms/widgets/search.html'``
* Renders as: ``<input type="search" ...>``

``TelInput``
~~~~~~~~~~~~~~

.. versionadded:: 5.2

.. class:: TelInput

* ``input_type``: ``'tel'``
* ``template_name``: ``'django/forms/widgets/tel.html'``
* Renders as: ``<input type="tel" ...>``

Browsers perform no client-side validation by default because telephone
number formats vary so much around the world. You can add some by setting
``pattern``, ``minlength``, or ``maxlength`` in the :attr:`Widget.attrs`
argument.

Additionally, you can add server-side validation to your form field with a
validator like :class:`~django.core.validators.RegexValidator` or via
third-party packages, such as `django-phonenumber-field`_.

.. _django-phonenumber-field: https://django-phonenumber-field.readthedocs.io/en/latest/index.html

``PasswordInput``
~~~~~~~~~~~~~~~~~

Expand Down
3 changes: 3 additions & 0 deletions docs/releases/5.2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,9 @@ Forms
* The new :class:`~django.forms.SearchInput` form widget is for entering search
queries and renders as ``<input type="search" ...>``.

* The new :class:`~django.forms.TelInput` form widget is for entering telephone
numbers and renders as ``<input type="tel" ...>``.

Generic Views
~~~~~~~~~~~~~

Expand Down
12 changes: 12 additions & 0 deletions tests/forms_tests/widget_tests/test_telinput.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from django.forms import TelInput

from .base import WidgetTest


class TelInputTest(WidgetTest):
widget = TelInput()

def test_render(self):
self.check_html(
self.widget, "telephone", "", html='<input type="tel" name="telephone">'
)

0 comments on commit b478cae

Please sign in to comment.