#37083: Add opt-in HTML5 date/time input types for form widgets
-------------------------------------+-------------------------------------
Reporter: Denny Biasiolli | Owner: (none)
Type: | Status: closed
Cleanup/optimization |
Component: Forms | Version: 6.0
Severity: Normal | Resolution: duplicate
Keywords: datetime, date, | Triage Stage:
time, inputs, admin, forms | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 1
-------------------------------------+-------------------------------------
Changes (by Jacob Walls):
* resolution: => duplicate
* status: new => closed
Old description:
> == Summary
>
> Django's `DateInput`, `TimeInput`, and `DateTimeInput` widgets currently
> render `<input type="text">` unconditionally.
> Modern browsers provide native date and time pickers via `<input
> type="date">`, `<input type="time">`, which offer a significantly better
> user experience—especially on mobile devices—without requiring any
> JavaScript.
>
> The Django admin's `vDateField` and `vTimeField` rely on custom
> JavaScript (`DateTimeShortcuts.js`) to provide calendar and clock popups.
> While functional, these are less accessible and less consistent across
> platforms than the native browser pickers.
>
> My idea is to add a new global setting, `USE_HTML5_DATE_INPUT`, that when
> set to `True`, switches these widgets to their HTML5 counterparts on an
> opt-in basis.
>
> The end goal it to go back on this ticket
> (https://code.djangoproject.com/ticket/29822) after (if) the current one
> gets approved/merged.
>
> == Motivation
>
> - **Better mobile UX**: Native pickers are touch-friendly and consistent
> with OS conventions. The current JS-based popups are difficult to use on
> small screens.
> - **Accessibility**: Browser-native pickers are built with accessibility
> in mind (keyboard navigation, screen reader support) out of the box.
> - **Reduced JS overhead**: When native pickers are used, the admin's
> `calendar.js` and `DateTimeShortcuts.js` become unnecessary for date/time
> fields.
> - **Gradual rollout**: Defaulting to `False` ensures zero breaking
> changes. Projects can opt in when ready and validate behavior before
> committing.
New description:
== Summary
Django's `DateInput`, `TimeInput`, and `DateTimeInput` widgets currently
render `<input type="text">` unconditionally.
Modern browsers provide native date and time pickers via `<input
type="date">`, `<input type="time">`, which offer a significantly better
user experience—especially on mobile devices—without requiring any
JavaScript.
The Django admin's `vDateField` and `vTimeField` rely on custom JavaScript
(`DateTimeShortcuts.js`) to provide calendar and clock popups. While
functional, these are less accessible and less consistent across platforms
than the native browser pickers.
My idea is to add a new global setting, `USE_HTML5_DATE_INPUT`, that when
set to `True`, switches these widgets to their HTML5 counterparts on an
opt-in basis.
The end goal it to go back on this ticket
(https://code.djangoproject.com/ticket/29822) after (if) the current one
gets approved/merged.
== Motivation
- **Better mobile UX**: Native pickers are touch-friendly and consistent
with OS conventions. The current JS-based popups are difficult to use on
small screens.
- **Accessibility**: Browser-native pickers are built with accessibility
in mind (keyboard navigation, screen reader support) out of the box.
- **Reduced JS overhead**: When native pickers are used, the admin's
`calendar.js` and `DateTimeShortcuts.js` become unnecessary for date/time
fields.
- **Gradual rollout**: Defaulting to `False` ensures zero breaking
changes. Projects can opt in when ready and validate behavior before
committing.
--
Comment:
Hi there, thanks for this. This has been discussed in a few places. (I see
you've participated in some!)
First, we just merged a documentation improvement in #33113.
Some more recent updates in [https://forum.djangoproject.com/t/adding-
searchinput-widget/32496/12 this forum thread] and
[https://groups.google.com/g/django-developers/c/wp-
pnzcB25o/m/D5gEOzPIAQAJ this mailing list thread].
Quoting from the first link:
> The consensus has been that each time it’s been looked at the cross
browser support wasn’t there, and we weren’t sure about handling
migrations for folks who’ve already done other things. But pending the
first improving, likely the second could be addressed. (So question is
largely, when, if ever, is it good enough? E.g. Is input type="date" ready
for use in accessible websites? - Hassell Inclusion)
So, I'll mark this as a duplicate of #21470 and #33100. However if you
have an interest in pursuing this, I would suggest a forum thread (focused
on date/time) to address these points:
- demonstrate that cross-browser support is ready
- demonstrate that accessibility will be good enough, taking into account
the improvements we just made to the existing widgets in #36459 and
#36458.
- mention touch-friendly aspect
- backwards-compatibility concerns, especially for less common formats
- respond to any points from those earlier threads
If you can refresh this discussion, that will be a huge help. Once there
is consensus to do something we can reopen the ticket. Thanks.
--
Ticket URL: <https://code.djangoproject.com/ticket/37083#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/django-updates/0107019df858fda1-cb6c2700-30c5-4988-9156-b84f46cac2c8-000000%40eu-central-1.amazonses.com.