#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 django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/064.99868a9da4c6bbe420020dea3c956075%40djangoproject.com.