#32125: Added basic support for <datalist> elements for suggestions in Input
widgets
-------------------------------------+-------------------------------------
Reporter: Volodymyr | Owner: nobody
Type: New feature | Status: new
Component: Forms | Version: master
Severity: Normal | Resolution:
Keywords: datalist, forms, | Triage Stage:
html5 | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 1
-------------------------------------+-------------------------------------
Description changed by Volodymyr:
Old description:
> HTML5 introduces a support for {{{<datalist>}}} '''HTML5''' elements for
> suggestions in '''input''' tag
>
> To do this in Django currently, you have to do something like:
>
> '''django/forms/widgets/datalist.html'''
> {{{
> {% include "django/forms/widgets/input.html" %}
> <datalist id="{{ widget.id }}" name="{{ widget.name }}"{% include
> "django/forms/widgets/attrs.html" %}>{% for group_name, group_choices,
> group_index in widget.optgroups %}{% if group_name %}
> <optgroup label="{{ group_name }}">{% endif %}{% for option in
> group_choices %}
> {% include option.template_name with widget=option %}{% endfor %}{% if
> group_name %}
> </optgroup>{% endif %}{% endfor %}
> </datalist>
> }}}
>
> '''django/forms/widgets/datalist_option.html'''
> {{{
> <option value="{{ widget.value|stringformat:'s' }}"{% include
> "django/forms/widgets/attrs.html" %}>
> }}}
>
> '''django/forms/widgets.py'''
> {{{#!python
> class Datalist(Select):
> input_type = 'text'
> template_name = 'django/forms/widgets/datalist.html'
> option_template_name = 'django/forms/widgets/datalist_option.html'
> add_id_index = False
> checked_attribute = {'selected': True}
> option_inherits_attrs = False
> }}}
>
> '''django/forms/fields.py'''
> {{{#!python
> class DatalistField(ChoiceField):
> widget = Datalist
> default_error_messages = {
> 'invalid_choice': _('Select a valid choice. %(value)s is not one
> of the available choices.'),
> }
>
> def __init__(self, *, choices='', **kwargs):
> super().__init__(**kwargs)
> self.choices = choices
> }}}
New description:
HTML5 introduces a support for {{{<datalist>}}} '''HTML5''' elements for
suggestions in '''input''' tag
To do this in Django currently, you have to do something like:
'''django/forms/widgets/datalist.html'''
{{{
{% include "django/forms/widgets/input.html" %}
<datalist id="{{ widget.id }}"{% include "django/forms/widgets/attrs.html"
%}>{% for group_name, group_choices, group_index in widget.optgroups %}{%
if group_name %}
<optgroup label="{{ group_name }}">{% endif %}{% for option in
group_choices %}
{% include option.template_name with widget=option %}{% endfor %}{% if
group_name %}
</optgroup>{% endif %}{% endfor %}
</datalist>
}}}
'''django/forms/widgets/datalist_option.html'''
{{{
<option value="{{ widget.value|stringformat:'s' }}"{% include
"django/forms/widgets/attrs.html" %}>
}}}
'''django/forms/widgets.py'''
{{{#!python
class Datalist(Select):
input_type = 'text'
template_name = 'django/forms/widgets/datalist.html'
option_template_name = 'django/forms/widgets/datalist_option.html'
add_id_index = False
checked_attribute = {'selected': True}
option_inherits_attrs = False
}}}
'''django/forms/fields.py'''
{{{#!python
class DatalistField(ChoiceField):
widget = Datalist
default_error_messages = {
'invalid_choice': _('Select a valid choice. %(value)s is not one
of the available choices.'),
}
def __init__(self, *, choices='', **kwargs):
super().__init__(**kwargs)
self.choices = choices
}}}
--
--
Ticket URL: <https://code.djangoproject.com/ticket/32125#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 on the web visit
https://groups.google.com/d/msgid/django-updates/064.99868a9da4c6bbe420020dea3c956075%40djangoproject.com.