diff options
| author | Jon Dufresne <jon.dufresne@gmail.com> | 2018-01-20 23:09:10 -0800 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-01-21 02:09:10 -0500 |
| commit | ff05de760cc4ef4c7f188e163c722ec3bc1f0cbf (patch) | |
| tree | ba133d0ecea7521935c98cf1c058df4e6a9ff233 | |
| parent | 4b0f39d9fb2033a9597e30ac13af162440b82ebc (diff) | |
Fixed #29038 -- Removed closing slash from HTML void tags.
112 files changed, 1487 insertions, 1483 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 1c27dc400b..268ce012d1 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -809,7 +809,7 @@ class ModelAdmin(BaseModelAdmin): A list_display column containing a checkbox widget. """ return helpers.checkbox.render(helpers.ACTION_CHECKBOX_NAME, str(obj.pk)) - action_checkbox.short_description = mark_safe('<input type="checkbox" id="action-toggle" />') + action_checkbox.short_description = mark_safe('<input type="checkbox" id="action-toggle">') def get_actions(self, request): """ diff --git a/django/contrib/admin/templates/admin/auth/user/change_password.html b/django/contrib/admin/templates/admin/auth/user/change_password.html index 7a47707df9..4b3bfb920c 100644 --- a/django/contrib/admin/templates/admin/auth/user/change_password.html +++ b/django/contrib/admin/templates/admin/auth/user/change_password.html @@ -5,7 +5,7 @@ {% block extrahead %}{{ block.super }} <script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script> {% endblock %} -{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %} +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">{% endblock %} {% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %} {% if not is_popup %} {% block breadcrumbs %} @@ -20,9 +20,9 @@ {% endif %} {% block content %}<div id="content-main"> <form action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %} -<input type="text" name="username" value="{{ original.get_username }}" style="display: none" /> +<input type="text" name="username" value="{{ original.get_username }}" style="display: none"> <div> -{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %} +{% if is_popup %}<input type="hidden" name="_popup" value="1">{% endif %} {% if form.errors %} <p class="errornote"> {% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} @@ -52,7 +52,7 @@ </fieldset> <div class="submit-row"> -<input type="submit" value="{% trans 'Change password' %}" class="default" /> +<input type="submit" value="{% trans 'Change password' %}" class="default"> </div> </div> diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html index c4c7ca85c6..2cf5137070 100644 --- a/django/contrib/admin/templates/admin/base.html +++ b/django/contrib/admin/templates/admin/base.html @@ -3,16 +3,16 @@ <html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}> <head> <title>{% block title %}{% endblock %}</title> -<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" /> +<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}"> {% block extrastyle %}{% endblock %} -{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %} +{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}">{% endif %} {% block extrahead %}{% endblock %} {% block responsive %} <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"> - <link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive.css" %}" /> - {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive_rtl.css" %}" />{% endif %} + <link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive.css" %}"> + {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive_rtl.css" %}">{% endif %} {% endblock %} -{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %} +{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE">{% endblock %} </head> {% load i18n %} @@ -81,7 +81,7 @@ {{ content }} {% endblock %} {% block sidebar %}{% endblock %} - <br class="clear" /> + <br class="clear"> </div> <!-- END Content --> diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index fd0b130b2d..f77e50a130 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -6,7 +6,7 @@ {{ media }} {% endblock %} -{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %} +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">{% endblock %} {% block coltype %}colM{% endblock %} @@ -39,8 +39,8 @@ {% endblock %} <form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %} <div> -{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %} -{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %} +{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %} +{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">{% endif %} {% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %} {% if errors %} <p class="errornote"> diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index e0af704aa9..34a4031799 100644 --- a/django/contrib/admin/templates/admin/change_list.html +++ b/django/contrib/admin/templates/admin/change_list.html @@ -3,9 +3,9 @@ {% block extrastyle %} {{ block.super }} - <link rel="stylesheet" type="text/css" href="{% static "admin/css/changelists.css" %}" /> + <link rel="stylesheet" type="text/css" href="{% static "admin/css/changelists.css" %}"> {% if cl.formset %} - <link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" /> + <link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}"> {% endif %} {% if cl.formset or action_form %} <script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script> diff --git a/django/contrib/admin/templates/admin/date_hierarchy.html b/django/contrib/admin/templates/admin/date_hierarchy.html index 005851051c..ecbd2a1a00 100644 --- a/django/contrib/admin/templates/admin/date_hierarchy.html +++ b/django/contrib/admin/templates/admin/date_hierarchy.html @@ -5,6 +5,6 @@ {% for choice in choices %} <li> {% if choice.link %}<a href="{{ choice.link }}">{% endif %}{{ choice.title }}{% if choice.link %}</a>{% endif %}</li> {% endfor %} -</ul><br class="clear" /> +</ul><br class="clear"> </div> {% endif %} diff --git a/django/contrib/admin/templates/admin/delete_confirmation.html b/django/contrib/admin/templates/admin/delete_confirmation.html index 2dedc84491..c28a87cd9b 100644 --- a/django/contrib/admin/templates/admin/delete_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_confirmation.html @@ -41,10 +41,10 @@ <ul>{{ deleted_objects|unordered_list }}</ul> <form method="post">{% csrf_token %} <div> - <input type="hidden" name="post" value="yes" /> - {% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %} - {% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %} - <input type="submit" value="{% trans "Yes, I'm sure" %}" /> + <input type="hidden" name="post" value="yes"> + {% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %} + {% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">{% endif %} + <input type="submit" value="{% trans "Yes, I'm sure" %}"> <a href="#" class="button cancel-link">{% trans "No, take me back" %}</a> </div> </form> diff --git a/django/contrib/admin/templates/admin/delete_selected_confirmation.html b/django/contrib/admin/templates/admin/delete_selected_confirmation.html index 6ae53fecd3..4d77ae33a0 100644 --- a/django/contrib/admin/templates/admin/delete_selected_confirmation.html +++ b/django/contrib/admin/templates/admin/delete_selected_confirmation.html @@ -43,11 +43,11 @@ <form method="post">{% csrf_token %} <div> {% for obj in queryset %} - <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}" /> + <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}"> {% endfor %} - <input type="hidden" name="action" value="delete_selected" /> - <input type="hidden" name="post" value="yes" /> - <input type="submit" value="{% trans "Yes, I'm sure" %}" /> + <input type="hidden" name="action" value="delete_selected"> + <input type="hidden" name="post" value="yes"> + <input type="submit" value="{% trans "Yes, I'm sure" %}"> <a href="#" class="button cancel-link">{% trans "No, take me back" %}</a> </div> </form> diff --git a/django/contrib/admin/templates/admin/edit_inline/tabular.html b/django/contrib/admin/templates/admin/edit_inline/tabular.html index f04faadf2f..2f449d67af 100644 --- a/django/contrib/admin/templates/admin/edit_inline/tabular.html +++ b/django/contrib/admin/templates/admin/edit_inline/tabular.html @@ -13,7 +13,7 @@ {% for field in inline_admin_formset.fields %} {% if not field.widget.is_hidden %} <th{% if field.required %} class="required"{% endif %}>{{ field.label|capfirst }} - {% if field.help_text %} <img src="{% static "admin/img/icon-unknown.svg" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}" />{% endif %} + {% if field.help_text %} <img src="{% static "admin/img/icon-unknown.svg" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}">{% endif %} </th> {% endif %} {% endfor %} diff --git a/django/contrib/admin/templates/admin/index.html b/django/contrib/admin/templates/admin/index.html index 5a4b127178..03383db8ea 100644 --- a/django/contrib/admin/templates/admin/index.html +++ b/django/contrib/admin/templates/admin/index.html @@ -1,7 +1,7 @@ {% extends "admin/base_site.html" %} {% load i18n static %} -{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />{% endblock %} +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}">{% endblock %} {% block coltype %}colMS{% endblock %} @@ -67,7 +67,7 @@ {% else %} <a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a> {% endif %} - <br/> + <br> {% if entry.content_type %} <span class="mini quiet">{% filter capfirst %}{{ entry.content_type }}{% endfilter %}</span> {% else %} diff --git a/django/contrib/admin/templates/admin/login.html b/django/contrib/admin/templates/admin/login.html index 397eadf4a2..396be276f9 100644 --- a/django/contrib/admin/templates/admin/login.html +++ b/django/contrib/admin/templates/admin/login.html @@ -1,7 +1,7 @@ {% extends "admin/base_site.html" %} {% load i18n static %} -{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/login.css" %}" /> +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/login.css" %}"> {{ form.media }} {% endblock %} @@ -49,7 +49,7 @@ <div class="form-row"> {{ form.password.errors }} {{ form.password.label_tag }} {{ form.password }} - <input type="hidden" name="next" value="{{ next }}" /> + <input type="hidden" name="next" value="{{ next }}"> </div> {% url 'admin_password_reset' as password_reset_url %} {% if password_reset_url %} @@ -58,7 +58,7 @@ </div> {% endif %} <div class="submit-row"> - <label> </label><input type="submit" value="{% trans 'Log in' %}" /> + <label> </label><input type="submit" value="{% trans 'Log in' %}"> </div> </form> diff --git a/django/contrib/admin/templates/admin/pagination.html b/django/contrib/admin/templates/admin/pagination.html index fc1e600805..bef843a444 100644 --- a/django/contrib/admin/templates/admin/pagination.html +++ b/django/contrib/admin/templates/admin/pagination.html @@ -8,5 +8,5 @@ {% endif %} {{ cl.result_count }} {% if cl.result_count == 1 %}{{ cl.opts.verbose_name }}{% else %}{{ cl.opts.verbose_name_plural }}{% endif %} {% if show_all_url %} <a href="{{ show_all_url }}" class="showall">{% trans 'Show all' %}</a>{% endif %} -{% if cl.formset and cl.result_count %}<input type="submit" name="_save" class="default" value="{% trans 'Save' %}"/>{% endif %} +{% if cl.formset and cl.result_count %}<input type="submit" name="_save" class="default" value="{% trans 'Save' %}">{% endif %} </p> diff --git a/django/contrib/admin/templates/admin/related_widget_wrapper.html b/django/contrib/admin/templates/admin/related_widget_wrapper.html index af17be8111..7b0a809392 100644 --- a/django/contrib/admin/templates/admin/related_widget_wrapper.html +++ b/django/contrib/admin/templates/admin/related_widget_wrapper.html @@ -7,21 +7,21 @@ <a class="related-widget-wrapper-link change-related" id="change_id_{{ name }}" data-href-template="{{ change_related_template_url }}?{{ url_params }}" title="{% blocktrans %}Change selected {{ model }}{% endblocktrans %}"> - <img src="{% static 'admin/img/icon-changelink.svg' %}" alt="{% trans 'Change' %}"/> + <img src="{% static 'admin/img/icon-changelink.svg' %}" alt="{% trans 'Change' %}"> </a> {% endif %} {% if can_add_related %} <a class="related-widget-wrapper-link add-related" id="add_id_{{ name }}" href="{{ add_related_url }}?{{ url_params }}" title="{% blocktrans %}Add another {{ model }}{% endblocktrans %}"> - <img src="{% static 'admin/img/icon-addlink.svg' %}" alt="{% trans 'Add' %}"/> + <img src="{% static 'admin/img/icon-addlink.svg' %}" alt="{% trans 'Add' %}"> </a> {% endif %} {% if can_delete_related %} <a class="related-widget-wrapper-link delete-related" id="delete_id_{{ name }}" data-href-template="{{ delete_related_template_url }}?{{ url_params }}" title="{% blocktrans %}Delete selected {{ model }}{% endblocktrans %}"> - <img src="{% static 'admin/img/icon-deletelink.svg' %}" alt="{% trans 'Delete' %}"/> + <img src="{% static 'admin/img/icon-deletelink.svg' %}" alt="{% trans 'Delete' %}"> </a> {% endif %} {% endspaceless %} diff --git a/django/contrib/admin/templates/admin/search_form.html b/django/contrib/admin/templates/admin/search_form.html index 1417c1f599..3bb5cba52c 100644 --- a/django/contrib/admin/templates/admin/search_form.html +++ b/django/contrib/admin/templates/admin/search_form.html @@ -2,14 +2,14 @@ {% if cl.search_fields %} <div id="toolbar"><form id="changelist-search" method="get"> <div><!-- DIV needed for valid HTML --> -<label for="searchbar"><img src="{% static "admin/img/search.svg" %}" alt="Search" /></label> -<input type="text" size="40" name="{{ search_var }}" value="{{ cl.query }}" id="searchbar" autofocus /> -<input type="submit" value="{% trans 'Search' %}" /> +<label for="searchbar"><img src="{% static "admin/img/search.svg" %}" alt="Search"></label> +<input type="text" size="40" name="{{ search_var }}" value="{{ cl.query }}" id="searchbar" autofocus> +<input type="submit" value="{% trans 'Search' %}"> {% if show_result_count %} <span class="small quiet">{% blocktrans count counter=cl.result_count %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %} (<a href="?{% if cl.is_popup %}_popup=1{% endif %}">{% if cl.show_full_result_count %}{% blocktrans with full_result_count=cl.full_result_count %}{{ full_result_count }} total{% endblocktrans %}{% else %}{% trans "Show all" %}{% endif %}</a>)</span> {% endif %} {% for pair in cl.params.items %} - {% if pair.0 != search_var %}<input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}"/>{% endif %} + {% if pair.0 != search_var %}<input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}">{% endif %} {% endfor %} </div> </form></div> diff --git a/django/contrib/admin/templates/admin/submit_line.html b/django/contrib/admin/templates/admin/submit_line.html index d6db711953..2e6cf057f0 100644 --- a/django/contrib/admin/templates/admin/submit_line.html +++ b/django/contrib/admin/templates/admin/submit_line.html @@ -1,11 +1,11 @@ {% load i18n admin_urls %} <div class="submit-row"> -{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" />{% endif %} +{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save">{% endif %} {% if show_delete_link %} {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %} <p class="deletelink-box"><a href="{% add_preserved_filters delete_url %}" class="deletelink">{% trans "Delete" %}</a></p> {% endif %} -{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" />{% endif %} -{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" />{% endif %} -{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" />{% endif %} +{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew">{% endif %} +{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother">{% endif %} +{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue">{% endif %} </div> diff --git a/django/contrib/admin/templates/admin/widgets/clearable_file_input.html b/django/contrib/admin/templates/admin/widgets/clearable_file_input.html index 71491fca45..80699d1a50 100644 --- a/django/contrib/admin/templates/admin/widgets/clearable_file_input.html +++ b/django/contrib/admin/templates/admin/widgets/clearable_file_input.html @@ -1,6 +1,6 @@ {% if widget.is_initial %}<p class="file-upload">{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>{% if not widget.required %} <span class="clearable-file-input"> -<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}" /> -<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label></span>{% endif %}<br /> +<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"> +<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label></span>{% endif %}<br> {{ widget.input_text }}:{% endif %} -<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %} />{% if widget.is_initial %}</p>{% endif %} +<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>{% if widget.is_initial %}</p>{% endif %} diff --git a/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html b/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html index b84ab14cca..281d331443 100644 --- a/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html +++ b/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html @@ -7,21 +7,21 @@ <a class="related-widget-wrapper-link change-related" id="change_id_{{ name }}" data-href-template="{{ change_related_template_url }}?{{ url_params }}" title="{% blocktrans %}Change selected {{ model }}{% endblocktrans %}"> - <img src="{% static 'admin/img/icon-changelink.svg' %}" alt="{% trans 'Change' %}"/> + <img src="{% static 'admin/img/icon-changelink.svg' %}" alt="{% trans 'Change' %}"> </a> {% endif %} {% if can_add_related %} <a class="related-widget-wrapper-link add-related" id="add_id_{{ name }}" href="{{ add_related_url }}?{{ url_params }}" title="{% blocktrans %}Add another {{ model }}{% endblocktrans %}"> - <img src="{% static 'admin/img/icon-addlink.svg' %}" alt="{% trans 'Add' %}"/> + <img src="{% static 'admin/img/icon-addlink.svg' %}" alt="{% trans 'Add' %}"> </a> {% endif %} {% if can_delete_related %} <a class="related-widget-wrapper-link delete-related" id="delete_id_{{ name }}" data-href-template="{{ delete_related_template_url }}?{{ url_params }}" title="{% blocktrans %}Delete selected {{ model }}{% endblocktrans %}"> - <img src="{% static 'admin/img/icon-deletelink.svg' %}" alt="{% trans 'Delete' %}"/> + <img src="{% static 'admin/img/icon-deletelink.svg' %}" alt="{% trans 'Delete' %}"> </a> {% endif %} {% endspaceless %} diff --git a/django/contrib/admin/templates/admin/widgets/split_datetime.html b/django/contrib/admin/templates/admin/widgets/split_datetime.html index 985f82d0ab..7fc7bf6833 100644 --- a/django/contrib/admin/templates/admin/widgets/split_datetime.html +++ b/django/contrib/admin/templates/admin/widgets/split_datetime.html @@ -1,4 +1,4 @@ <p class="datetime"> - {{ date_label }} {% with widget=widget.subwidgets.0 %}{% include widget.template_name %}{% endwith %}<br /> + {{ date_label }} {% with widget=widget.subwidgets.0 %}{% include widget.template_name %}{% endwith %}<br> {{ time_label }} {% with widget=widget.subwidgets.1 %}{% include widget.template_name %}{% endwith %} </p> diff --git a/django/contrib/admin/templates/admin/widgets/url.html b/django/contrib/admin/templates/admin/widgets/url.html index 554a9343fe..ee1a66a35f 100644 --- a/django/contrib/admin/templates/admin/widgets/url.html +++ b/django/contrib/admin/templates/admin/widgets/url.html @@ -1 +1 @@ -{% if widget.value %}<p class="url">{{ current_label }} <a href="{{ widget.href }}">{{ widget.value }}</a><br />{{ change_label }} {% endif %}{% include "django/forms/widgets/input.html" %}{% if widget.value %}</p>{% endif %} +{% if widget.value %}<p class="url">{{ current_label }} <a href="{{ widget.href }}">{{ widget.value }}</a><br>{{ change_label }} {% endif %}{% include "django/forms/widgets/input.html" %}{% if widget.value %}</p>{% endif %} diff --git a/django/contrib/admin/templates/registration/password_change_form.html b/django/contrib/admin/templates/registration/password_change_form.html index a48017700f..8c26108c6e 100644 --- a/django/contrib/admin/templates/registration/password_change_form.html +++ b/django/contrib/admin/templates/registration/password_change_form.html @@ -1,6 +1,6 @@ {% extends "admin/base_site.html" %} {% load i18n static %} -{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %} +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">{% endblock %} {% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %} {% trans 'Change password' %} / <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>{% endblock %} {% block breadcrumbs %} <div class="breadcrumbs"> @@ -51,7 +51,7 @@ </fieldset> <div class="submit-row"> - <input type="submit" value="{% trans 'Change my password' %}" class="default" /> + <input type="submit" value="{% trans 'Change my password' %}" class="default"> </div> </div> diff --git a/django/contrib/admin/templates/registration/password_reset_confirm.html b/django/contrib/admin/templates/registration/password_reset_confirm.html index 1a24527c1d..8666fa903c 100644 --- a/django/contrib/admin/templates/registration/password_reset_confirm.html +++ b/django/contrib/admin/templates/registration/password_reset_confirm.html @@ -1,7 +1,7 @@ {% extends "admin/base_site.html" %} {% load i18n static %} -{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %} +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">{% endblock %} {% block breadcrumbs %} <div class="breadcrumbs"> <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> @@ -29,7 +29,7 @@ <label for="id_new_password2">{% trans 'Confirm password:' %}</label> {{ form.new_password2 }} </div> - <input type="submit" value="{% trans 'Change my password' %}" /> + <input type="submit" value="{% trans 'Change my password' %}"> </fieldset> </form> diff --git a/django/contrib/admin/templates/registration/password_reset_form.html b/django/contrib/admin/templates/registration/password_reset_form.html index 5110d1a995..5c5d761d97 100644 --- a/django/contrib/admin/templates/registration/password_reset_form.html +++ b/django/contrib/admin/templates/registration/password_reset_form.html @@ -1,7 +1,7 @@ {% extends "admin/base_site.html" %} {% load i18n static %} -{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %} +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">{% endblock %} {% block breadcrumbs %} <div class="breadcrumbs"> <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> @@ -22,7 +22,7 @@ <label for="id_email">{% trans 'Email address:' %}</label> {{ form.email }} </div> - <input type="submit" value="{% trans 'Reset my password' %}" /> + <input type="submit" value="{% trans 'Reset my password' %}"> </fieldset> </form> diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py index 7908b0333f..ab0db80301 100644 --- a/django/contrib/admin/templatetags/admin_list.py +++ b/django/contrib/admin/templatetags/admin_list.py @@ -177,7 +177,7 @@ def result_headers(cl): def _boolean_icon(field_val): icon_url = static('admin/img/icon-%s.svg' % {True: 'yes', False: 'no', None: 'unknown'}[field_val]) - return format_html('<img src="{}" alt="{}" />', icon_url, field_val) + return format_html('<img src="{}" alt="{}">', icon_url, field_val) def _coerce_field_name(field_name, field_index): diff --git a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html index 44f0c71aae..caf983ac6d 100644 --- a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html +++ b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html @@ -20,12 +20,12 @@ {% for library in filter_libraries %} <div class="module"> <h2>{% firstof library.grouper _("Built-in filters") %}</h2> - {% if library.grouper %}<p class="small quiet">{% blocktrans with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these filters, put <code>{{ code }}</code> in your template before using the filter.{% endblocktrans %}</p><hr />{% endif %} + {% if library.grouper %}<p class="small quiet">{% blocktrans with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these filters, put <code>{{ code }}</code> in your template before using the filter.{% endblocktrans %}</p><hr>{% endif %} {% for filter in library.list|dictsort:"name" %} <h3 id="{{ library.grouper|default:"built_in" }}-{{ filter.name }}">{{ filter.name }}</h3> {{ filter.title }} {{ filter.body }} - {% if not forloop.last %}<hr />{% endif %} + {% if not forloop.last %}<hr>{% endif %} {% endfor %} </div> {% endfor %} diff --git a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html index 6196985474..bb4f239147 100644 --- a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html +++ b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html @@ -20,12 +20,12 @@ {% for library in tag_libraries %} <div class="module"> <h2>{% firstof library.grouper _("Built-in tags") %}</h2> - {% if library.grouper %}<p class="small quiet">{% blocktrans with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these tags, put <code>{{ code }}</code> in your template before using the tag.{% endblocktrans %}</p><hr />{% endif %} + {% if library.grouper %}<p class="small quiet">{% blocktrans with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these tags, put <code>{{ code }}</code> in your template before using the tag.{% endblocktrans %}</p><hr>{% endif %} {% for tag in library.list|dictsort:"name" %} <h3 id="{{ library.grouper|default:"built_in" }}-{{ tag.name }}">{{ tag.name }}</h3> <h4>{{ tag.title|striptags }}</h4> {{ tag.body }} - {% if not forloop.last %}<hr />{% endif %} + {% if not forloop.last %}<hr>{% endif %} {% endfor %} </div> {% endfor %} diff --git a/django/contrib/admindocs/templates/admin_doc/view_index.html b/django/contrib/admindocs/templates/admin_doc/view_index.html index 16e48ca8dc..77b3e40b1d 100644 --- a/django/contrib/admindocs/templates/admin_doc/view_index.html +++ b/django/contrib/admindocs/templates/admin_doc/view_index.html @@ -50,7 +50,7 @@ View function: <code>{{ full_name }}</code>. Name: <code>{{ url_name }}</code>. {% endblocktrans %}</p> <p>{{ view.title }}</p> -<hr /> +<hr> {% endifchanged %} {% endfor %} </div> diff --git a/django/forms/forms.py b/django/forms/forms.py index 1be7814993..19d5778468 100644 --- a/django/forms/forms.py +++ b/django/forms/forms.py @@ -274,7 +274,7 @@ class BaseForm: normal_row='<tr%(html_class_attr)s><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s</td></tr>', error_row='<tr><td colspan="2">%s</td></tr>', row_ender='</td></tr>', - help_text_html='<br /><span class="helptext">%s</span>', + help_text_html='<br><span class="helptext">%s</span>', errors_on_separate_row=False) def as_ul(self): diff --git a/django/forms/jinja2/django/forms/widgets/clearable_file_input.html b/django/forms/jinja2/django/forms/widgets/clearable_file_input.html index 7248f32d2a..9e76435216 100644 --- a/django/forms/jinja2/django/forms/widgets/clearable_file_input.html +++ b/django/forms/jinja2/django/forms/widgets/clearable_file_input.html @@ -1,5 +1,5 @@ {% if widget.is_initial %}{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>{% if not widget.required %} -<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}" /> -<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>{% endif %}<br /> +<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"> +<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>{% endif %}<br> {{ widget.input_text }}:{% endif %} -<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %} /> +<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}> diff --git a/django/forms/jinja2/django/forms/widgets/input.html b/django/forms/jinja2/django/forms/widgets/input.html index abbdf6bd26..d5651571f2 100644 --- a/django/forms/jinja2/django/forms/widgets/input.html +++ b/django/forms/jinja2/django/forms/widgets/input.html @@ -1 +1 @@ -<input type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %} value="{{ widget.value }}"{% endif %}{% include "django/forms/widgets/attrs.html" %} /> +<input type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %} value="{{ widget.value }}"{% endif %}{% include "django/forms/widgets/attrs.html" %}> diff --git a/django/forms/templates/django/forms/widgets/clearable_file_input.html b/django/forms/templates/django/forms/widgets/clearable_file_input.html index 7248f32d2a..9e76435216 100644 --- a/django/forms/templates/django/forms/widgets/clearable_file_input.html +++ b/django/forms/templates/django/forms/widgets/clearable_file_input.html @@ -1,5 +1,5 @@ {% if widget.is_initial %}{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>{% if not widget.required %} -<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}" /> -<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>{% endif %}<br /> +<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"> +<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>{% endif %}<br> {{ widget.input_text }}:{% endif %} -<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %} /> +<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}> diff --git a/django/forms/templates/django/forms/widgets/input.html b/django/forms/templates/django/forms/widgets/input.html index 5feef43c55..9010a92145 100644 --- a/django/forms/templates/django/forms/widgets/input.html +++ b/django/forms/templates/django/forms/widgets/input.html @@ -1 +1 @@ -<input type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}{% include "django/forms/widgets/attrs.html" %} /> +<input type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}{% include "django/forms/widgets/attrs.html" %}> diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 6ccbb86274..76c12e2dcb 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -74,7 +74,7 @@ class Media: media = sorted(self._css) return chain.from_iterable([ format_html( - '<link href="{}" type="text/css" media="{}" rel="stylesheet" />', + '<link href="{}" type="text/css" media="{}" rel="stylesheet">', self.absolute_path(path), medium ) for path in self._css[medium] ] for medium in media) diff --git a/django/template/backends/utils.py b/django/template/backends/utils.py index 8147bb4988..8d41213965 100644 --- a/django/template/backends/utils.py +++ b/django/template/backends/utils.py @@ -6,7 +6,7 @@ from django.utils.safestring import SafeText def csrf_input(request): return format_html( - '<input type="hidden" name="csrfmiddlewaretoken" value="{}" />', + '<input type="hidden" name="csrfmiddlewaretoken" value="{}">', get_token(request)) diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py index 5d7665d64e..e876c555f3 100644 --- a/django/template/defaultfilters.py +++ b/django/template/defaultfilters.py @@ -404,7 +404,7 @@ def force_escape(value): def linebreaks_filter(value, autoescape=True): """ Replace line breaks in plain text with appropriate HTML; a single - newline becomes an HTML line break (``<br />``) and a new line + newline becomes an HTML line break (``<br>``) and a new line followed by a blank line becomes a paragraph break (``</p>``). """ autoescape = autoescape and not isinstance(value, SafeData) @@ -416,13 +416,13 @@ def linebreaks_filter(value, autoescape=True): def linebreaksbr(value, autoescape=True): """ Convert all newlines in a piece of plain text to HTML line breaks - (``<br />``). + (``<br>``). """ autoescape = autoescape and not isinstance(value, SafeData) value = normalize_newlines(value) if autoescape: value = escape(value) - return mark_safe(value.replace('\n', '<br />')) + return mark_safe(value.replace('\n', '<br>')) @register.filter(is_safe=True) diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 6d8813b2fe..abb72fa13c 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -54,7 +54,7 @@ class CsrfTokenNode(Node): if csrf_token == 'NOTPROVIDED': return format_html("") else: - return format_html("<input type='hidden' name='csrfmiddlewaretoken' value='{}' />", csrf_token) + return format_html("<input type='hidden' name='csrfmiddlewaretoken' value='{}'>", csrf_token) else: # It's very probable that the token is missing because of # misconfiguration, so we raise a warning @@ -1408,7 +1408,7 @@ def widthratio(parser, token): For example:: <img src="bar.png" alt="Bar" - height="10" width="{% widthratio this_value max_value max_width %}" /> + height="10" width="{% widthratio this_value max_value max_width %}"> If ``this_value`` is 175, ``max_value`` is 200, and ``max_width`` is 100, the image in the above example will be 88 pixels wide diff --git a/django/test/html.py b/django/test/html.py index fdedafe76e..c01f73c1fb 100644 --- a/django/test/html.py +++ b/django/test/html.py @@ -118,7 +118,7 @@ class Element: output += ''.join(str(c) for c in self.children) output += '\n</%s>' % self.name else: - output += ' />' + output += '>' return output def __repr__(self): diff --git a/django/utils/html.py b/django/utils/html.py index 9c219ba1c6..e6389d4db5 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -124,13 +124,13 @@ def format_html_join(sep, format_string, args_generator): @keep_lazy_text def linebreaks(value, autoescape=False): - """Convert newlines into <p> and <br />s.""" + """Convert newlines into <p> and <br>s.""" value = normalize_newlines(value) paras = re.split('\n{2,}', str(value)) if autoescape: - paras = ['<p>%s</p>' % escape(p).replace('\n', '<br />') for p in paras] + paras = ['<p>%s</p>' % escape(p).replace('\n', '<br>') for p in paras] else: - paras = ['<p>%s</p>' % p.replace('\n', '<br />') for p in paras] + paras = ['<p>%s</p>' % p.replace('\n', '<br>') for p in paras] return '\n\n'.join(paras) diff --git a/django/views/static.py b/django/views/static.py index c9d4b0317a..c93c136993 100644 --- a/django/views/static.py +++ b/django/views/static.py @@ -62,9 +62,9 @@ DEFAULT_DIRECTORY_INDEX_TEMPLATE = """ <!DOCTYPE html> <html lang="en"> <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta http-equiv="Content-Language" content="en-us" /> - <meta name="robots" content="NONE,NOARCHIVE" /> + <meta http-equiv="Content-type" content="text/html; charset=utf-8"> + <meta http-equiv="Content-Language" content="en-us"> + <meta name="robots" content="NONE,NOARCHIVE"> <title>{% blocktrans %}Index of {{ directory }}{% endblocktrans %}</title> </head> <body> diff --git a/docs/howto/static-files/index.txt b/docs/howto/static-files/index.txt index 847e3c9c19..bff1a5daa1 100644 --- a/docs/howto/static-files/index.txt +++ b/docs/howto/static-files/index.txt @@ -30,7 +30,7 @@ Configuring static files .. code-block:: html+django {% load static %} - <img src="{% static "my_app/example.jpg" %}" alt="My image"/> + <img src="{% static "my_app/example.jpg" %}" alt="My image"> 4. Store your static files in a folder called ``static`` in your app. For example ``my_app/static/my_app/example.jpg``. diff --git a/docs/intro/contributing.txt b/docs/intro/contributing.txt index 07d9aae379..ef44c81600 100644 --- a/docs/intro/contributing.txt +++ b/docs/intro/contributing.txt @@ -535,8 +535,8 @@ Use the arrow keys to move up and down. +++ b/docs/ref/forms/api.txt @@ -1065,3 +1065,13 @@ You can put several Django forms inside one ``<form>`` tag. To give each >>> print(father.as_ul()) - <li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name" /></li> - <li><label for="id_father-last_name">Last name:</label> <input type="text" name="father-last_name" id="id_father-last_name" /></li> + <li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name"></li> + <li><label for="id_father-last_name">Last name:</label> <input type="text" name="father-last_name" id="id_father-last_name"></li> + +The prefix can also be specified on the form class:: + diff --git a/docs/intro/overview.txt b/docs/intro/overview.txt index f6e34b0695..7cf17ba376 100644 --- a/docs/intro/overview.txt +++ b/docs/intro/overview.txt @@ -307,7 +307,7 @@ Here's what the "base.html" template, including the use of :doc:`static files <title>{% block title %}{% endblock %}</title> </head> <body> - <img src="{% static "images/sitelogo.png" %}" alt="Logo" /> + <img src="{% static "images/sitelogo.png" %}" alt="Logo"> {% block content %}{% endblock %} </body> </html> diff --git a/docs/intro/tutorial04.txt b/docs/intro/tutorial04.txt index 6f685fc402..8e1f8d9aef 100644 --- a/docs/intro/tutorial04.txt +++ b/docs/intro/tutorial04.txt @@ -22,10 +22,10 @@ tutorial, so that the template contains an HTML ``<form>`` element: <form action="{% url 'polls:vote' question.id %}" method="post"> {% csrf_token %} {% for choice in question.choice_set.all %} - <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> - <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> + <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}"> + <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br> {% endfor %} - <input type="submit" value="Vote" /> + <input type="submit" value="Vote"> </form> A quick rundown: diff --git a/docs/intro/tutorial06.txt b/docs/intro/tutorial06.txt index 0d3dd23315..231ae315ee 100644 --- a/docs/intro/tutorial06.txt +++ b/docs/intro/tutorial06.txt @@ -70,7 +70,7 @@ Next, add the following at the top of ``polls/templates/polls/index.html``: {% load static %} - <link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" /> + <link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}"> The ``{% static %}`` template tag generates the absolute URL of static files. diff --git a/docs/ref/class-based-views/generic-editing.txt b/docs/ref/class-based-views/generic-editing.txt index 65cd772536..8c1fe0f758 100644 --- a/docs/ref/class-based-views/generic-editing.txt +++ b/docs/ref/class-based-views/generic-editing.txt @@ -76,7 +76,7 @@ editing content: <form action="" method="post">{% csrf_token %} {{ form.as_p }} - <input type="submit" value="Send message" /> + <input type="submit" value="Send message"> </form> @@ -132,7 +132,7 @@ editing content: <form action="" method="post">{% csrf_token %} {{ form.as_p }} - <input type="submit" value="Save" /> + <input type="submit" value="Save"> </form> ``UpdateView`` @@ -189,7 +189,7 @@ editing content: <form action="" method="post">{% csrf_token %} {{ form.as_p }} - <input type="submit" value="Update" /> + <input type="submit" value="Update"> </form> ``DeleteView`` @@ -240,5 +240,5 @@ editing content: <form action="" method="post">{% csrf_token %} <p>Are you sure you want to delete "{{ object }}"?</p> - <input type="submit" value="Confirm" /> + <input type="submit" value="Confirm"> </form> diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt index c043561f17..39c02f26af 100644 --- a/docs/ref/contrib/admin/index.txt +++ b/docs/ref/contrib/admin/index.txt @@ -1180,7 +1180,7 @@ subclass:: # for each line of the address and you want to separate each # line by a linebreak return format_html_join( - mark_safe('<br/>'), + mark_safe('<br>'), '{}', ((line,) for line in instance.get_full_address()), ) or mark_safe("<span class='errors'>I can't determine this address.</span>") diff --git a/docs/ref/forms/api.txt b/docs/ref/forms/api.txt index 5e001a2f62..bafa688f98 100644 --- a/docs/ref/forms/api.txt +++ b/docs/ref/forms/api.txt @@ -255,9 +255,9 @@ precedence:: ... comment = forms.CharField() >>> f = CommentForm(initial={'name': 'instance'}, auto_id=False) >>> print(f) - <tr><th>Name:</th><td><input type="text" name="name" value="instance" required /></td></tr> - <tr><th>Url:</th><td><input type="url" name="url" required /></td></tr> - <tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr> + <tr><th>Name:</th><td><input type="text" name="name" value="instance" required></td></tr> + <tr><th>Url:</th><td><input type="url" name="url" required></td></tr> + <tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr> .. method:: Form.get_initial_for_field(field, field_name) @@ -322,10 +322,10 @@ You can alter the field of :class:`Form` instance to change the way it is presented in the form:: >>> f.as_table().split('\n')[0] - '<tr><th>Name:</th><td><input name="name" type="text" value="instance" required /></td></tr>' + '<tr><th>Name:</th><td><input name="name" type="text" value="instance" required></td></tr>' >>> f.fields['name'].label = "Username" >>> f.as_table().split('\n')[0] - '<tr><th>Username:</th><td><input name="name" type="text" value="instance" required /></td></tr>' + '<tr><th>Username:</th><td><input name="name" type="text" value="instance" required></td></tr>' Beware not to alter the ``base_fields`` attribute because this modification will influence all subsequent ``ContactForm`` instances within the same Python @@ -334,7 +334,7 @@ process:: >>> f.base_fields['name'].label = "Username" >>> another_f = CommentForm(auto_id=False) >>> another_f.as_table().split('\n')[0] - '<tr><th>Username:</th><td><input name="name" type="text" value="class" required /></td></tr>' + '<tr><th>Username:</th><td><input name="name" type="text" value="class" required></td></tr>' Accessing "clean" data ====================== @@ -438,10 +438,10 @@ simply ``print`` it:: >>> f = ContactForm() >>> print(f) - <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" required /></td></tr> - <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" required /></td></tr> - <tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" required /></td></tr> - <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr> + <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" required></td></tr> + <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" required></td></tr> + <tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" required></td></tr> + <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself"></td></tr> If the form is bound to data, the HTML output will include that data appropriately. For example, if a field is represented by an @@ -455,10 +455,10 @@ include ``checked`` if appropriate:: ... 'cc_myself': True} >>> f = ContactForm(data) >>> print(f) - <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" value="hello" required /></td></tr> - <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" value="Hi there" required /></td></tr> - <tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" value="foo@example.com" required /></td></tr> - <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" checked /></td></tr> + <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" value="hello" required></td></tr> + <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" value="Hi there" required></td></tr> + <tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" value="foo@example.com" required></td></tr> + <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" checked></td></tr> This default output is a two-column HTML table, with a ``<tr>`` for each field. Notice the following: @@ -506,12 +506,12 @@ containing one field:: >>> f = ContactForm() >>> f.as_p() - '<p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" required /></p>\n<p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" required /></p>\n<p><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" required /></p>\n<p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>' + '<p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" required></p>\n<p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" required></p>\n<p><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" required></p>\n<p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself"></p>' >>> print(f.as_p()) - <p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" required /></p> - <p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" required /></p> - <p><label for="id_sender">Sender:</label> <input type="email" name="sender" id="id_sender" required /></p> - <p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p> + <p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" required></p> + <p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" required></p> + <p><label for="id_sender">Sender:</label> <input type="email" name="sender" id="id_sender" required></p> + <p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself"></p> ``as_ul()`` ----------- @@ -525,12 +525,12 @@ flexibility:: >>> f = ContactForm() >>> f.as_ul() - '<li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" required /></li>\n<li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" required /></li>\n<li><label for="id_sender">Sender:</label> <input type="email" name="sender" id="id_sender" required /></li>\n<li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></li>' + '<li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" required></li>\n<li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" required></li>\n<li><label for="id_sender">Sender:</label> <input type="email" name="sender" id="id_sender" required></li>\n<li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself"></li>' >>> print(f.as_ul()) - <li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" required /></li> - <li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" required /></li> - <li><label for="id_sender">Sender:</label> <input type="email" name="sender" id="id_sender" required /></li> - <li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></li> + <li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" required></li> + <li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" required></li> + <li><label for="id_sender">Sender:</label> <input type="email" name="sender" id="id_sender" required></li> + <li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself"></li> ``as_table()`` -------------- @@ -543,12 +543,12 @@ it calls its ``as_table()`` method behind the scenes:: >>> f = ContactForm() >>> f.as_table() - '<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" required /></td></tr>\n<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" required /></td></tr>\n<tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" required /></td></tr>\n<tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr>' + '<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" required></td></tr>\n<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" required></td></tr>\n<tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" required></td></tr>\n<tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself"></td></tr>' >>> print(f) - <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" required /></td></tr> - <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" required /></td></tr> - <tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" required /></td></tr> - <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr> + <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" required></td></tr> + <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" required></td></tr> + <tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" required></td></tr> + <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself"></td></tr> .. _ref-forms-api-styling-form-rows: @@ -618,20 +618,20 @@ tags nor ``id`` attributes:: >>> f = ContactForm(auto_id=False) >>> print(f.as_table()) - <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" required /></td></tr> - <tr><th>Message:</th><td><input type="text" name="message" required /></td></tr> - <tr><th>Sender:</th><td><input type="email" name="sender" required /></td></tr> - <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr> + <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" required></td></tr> + <tr><th>Message:</th><td><input type="text" name="message" required></td></tr> + <tr><th>Sender:</th><td><input type="email" name="sender" required></td></tr> + <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself"></td></tr> >>> print(f.as_ul()) - <li>Subject: <input type="text" name="subject" maxlength="100" required /></li> - <li>Message: <input type="text" name="message" required /></li> - <li>Sender: <input type="email" name="sender" required /></li> - <li>Cc myself: <input type="checkbox" name="cc_myself" /></li> + <li>Subject: <input type="text" name="subject" maxlength="100" required></li> + <li>Message: <input type="text" name="message" required></li> + <li>Sender: <input type="email" name="sender" required></li> + <li>Cc myself: <input type="checkbox" name="cc_myself"></li> >>> print(f.as_p()) - <p>Subject: <input type="text" name="subject" maxlength="100" required /></p> - <p>Message: <input type="text" name="message" required /></p> - <p>Sender: <input type="email" name="sender" required /></p> - <p>Cc myself: <input type="checkbox" name="cc_myself" /></p> + <p>Subject: <input type="text" name="subject" maxlength="100" required></p> + <p>Message: <input type="text" name="message" required></p> + <p>Sender: <input type="email" name="sender" required></p> + <p>Cc myself: <input type="checkbox" name="cc_myself"></p> If ``auto_id`` is set to ``True``, then the form output *will* include ``<label>`` tags and will simply use the field name as its ``id`` for each form @@ -639,20 +639,20 @@ field:: >>> f = ContactForm(auto_id=True) >>> print(f.as_table()) - <tr><th><label for="subject">Subject:</label></th><td><input id="subject" type="text" name="subject" maxlength="100" required /></td></tr> - <tr><th><label for="message">Message:</label></th><td><input type="text" name="message" id="message" required /></td></tr> - <tr><th><label for="sender">Sender:</label></th><td><input type="email" name="sender" id="sender" required /></td></tr> - <tr><th><label for="cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="cc_myself" /></td></tr> + <tr><th><label for="subject">Subject:</label></th><td><input id="subject" type="text" name="subject" maxlength="100" required></td></tr> + <tr><th><label for="message">Message:</label></th><td><input type="text" name="message" id="message" required></td></tr> + <tr><th><label for="sender">Sender:</label></th><td><input type="email" name="sender" id="sender" required></td></tr> + <tr><th><label for="cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="cc_myself"></td></tr> >>> print(f.as_ul()) - <li><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" required /></li> - <li><label for="message">Message:</label> <input type="text" name="message" id="message" required /></li> - <li><label for="sender">Sender:</label> <input type="email" name="sender" id="sender" required /></li> - <li><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself" /></li> + <li><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" required></li> + <li><label for="message">Message:</label> <input type="text" name="message" id="message" required></li> + <li><label for="sender">Sender:</label> <input type="email" name="sender" id="sender" required></li> + <li><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself"></li> >>> print(f.as_p()) - <p><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" required /></p> - <p><label for="message">Message:</label> <input type="text" name="message" id="message" required /></p> - <p><label for="sender">Sender:</label> <input type="email" name="sender" id="sender" required /></p> - <p><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself" /></p> + <p><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" required></p> + <p><label for="message">Message:</label> <input type="text" name="message" id="message" required></p> + <p><label for="sender">Sender:</label> <input type="email" name="sender" id="sender" required></p> + <p><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself"></p> If ``auto_id`` is set to a string containing the format character ``'%s'``, then the form output will include ``<label>`` tags, and will generate ``id`` @@ -662,20 +662,20 @@ attributes based on the format string. For example, for a format string >>> f = ContactForm(auto_id='id_for_%s') >>> print(f.as_table()) - <tr><th><label for="id_for_subject">Subject:</label></th><td><input id="id_for_subject" type="text" name="subject" maxlength="100" required /></td></tr> - <tr><th><label for="id_for_message">Message:</label></th><td><input type="text" name="message" id="id_for_message" required /></td></tr> - <tr><th><label for="id_for_sender">Sender:</label></th><td><input type="email" name="sender" id="id_for_sender" required /></td></tr> - <tr><th><label for="id_for_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></td></tr> + <tr><th><label for="id_for_subject">Subject:</label></th><td><input id="id_for_subject" type="text" name="subject" maxlength="100" required></td></tr> + <tr><th><label for="id_for_message">Message:</label></th><td><input type="text" name="message" id="id_for_message" required></td></tr> + <tr><th><label for="id_for_sender">Sender:</label></th><td><input type="email" name="sender" id="id_for_sender" required></td></tr> + <tr><th><label for="id_for_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_for_cc_myself"></td></tr> >>> print(f.as_ul()) - <li><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" required /></li> - <li><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" required /></li> - <li><label for="id_for_sender">Sender:</label> <input type="email" name="sender" id="id_for_sender" required /></li> - <li><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li> + <li><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" required></li> + <li><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" required></li> + <li><label for="id_for_sender">Sender:</label> <input type="email" name="sender" id="id_for_sender" required></li> + <li><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself"></li> >>> print(f.as_p()) - <p><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" required /></p> - <p><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" required /></p> - <p><label for="id_for_sender">Sender:</label> <input type="email" name="sender" id="id_for_sender" required /></p> - <p><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></p> + <p><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" required></p> + <p><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" required></p> + <p><label for="id_for_sender">Sender:</label> <input type="email" name="sender" id="id_for_sender" required></p> + <p><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself"></p> If ``auto_id`` is set to any other true value -- such as a string that doesn't include ``%s`` -- then the library will act as if ``auto_id`` is ``True``. @@ -692,16 +692,16 @@ It's possible to customize that character, or omit it entirely, using the >>> f = ContactForm(auto_id='id_for_%s', label_suffix='') >>> print(f.as_ul()) - <li><label for="id_for_subject">Subject</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" required /></li> - <li><label for="id_for_message">Message</label> <input type="text" name="message" id="id_for_message" required /></li> - <li><label for="id_for_sender">Sender</label> <input type="email" name="sender" id="id_for_sender" required /></li> - <li><label for="id_for_cc_myself">Cc myself</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li> + <li><label for="id_for_subject">Subject</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" required></li> + <li><label for="id_for_message">Message</label> <input type="text" name="message" id="id_for_message" required></li> + <li><label for="id_for_sender">Sender</label> <input type="email" name="sender" id="id_for_sender" required></li> + <li><label for="id_for_cc_myself">Cc myself</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself"></li> >>> f = ContactForm(auto_id='id_for_%s', label_suffix=' ->') >>> print(f.as_ul()) - <li><label for="id_for_subject">Subject -></label> <input id="id_for_subject" type="text" name="subject" maxlength="100" required /></li> - <li><label for="id_for_message">Message -></label> <input type="text" name="message" id="id_for_message" required /></li> - <li><label for="id_for_sender">Sender -></label> <input type="email" name="sender" id="id_for_sender" required /></li> - <li><label for="id_for_cc_myself">Cc myself -></label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li> + <li><label for="id_for_subject">Subject -></label> <input id="id_for_subject" type="text" name="subject" maxlength="100" required></li> + <li><label for="id_for_message">Message -></label> <input type="text" name="message" id="id_for_message" required></li> + <li><label for="id_for_sender">Sender -></label> <input type="email" name="sender" id="id_for_sender" required></li> + <li><label for="id_for_cc_myself">Cc myself -></label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself"></li> Note that the label suffix is added only if the last character of the label isn't a punctuation character (in English, those are ``.``, ``!``, ``?`` @@ -788,22 +788,22 @@ method you're using:: ... 'cc_myself': True} >>> f = ContactForm(data, auto_id=False) >>> print(f.as_table()) - <tr><th>Subject:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="subject" maxlength="100" required /></td></tr> - <tr><th>Message:</th><td><input type="text" name="message" value="Hi there" required /></td></tr> - <tr><th>Sender:</th><td><ul class="errorlist"><li>Enter a valid email address.</li></ul><input type="email" name="sender" value="invalid email address" required /></td></tr> - <tr><th>Cc myself:</th><td><input checked type="checkbox" name="cc_myself" /></td></tr> + <tr><th>Subject:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="subject" maxlength="100" required></td></tr> + <tr><th>Message:</th><td><input type="text" name="message" value="Hi there" required></td></tr> + <tr><th>Sender:</th><td><ul class="errorlist"><li>Enter a valid email address.</li></ul><input type="email" name="sender" value="invalid email address" required></td></tr> + <tr><th>Cc myself:</th><td><input checked type="checkbox" name="cc_myself"></td></tr> >>> print(f.as_ul()) - <li><ul class="errorlist"><li>This field is required.</li></ul>Subject: <input type="text" name="subject" maxlength="100" required /></li> - <li>Message: <input type="text" name="message" value="Hi there" required /></li> - <li><ul class="errorlist"><li>Enter a valid email address.</li></ul>Sender: <input type="email" name="sender" value="invalid email address" required /></li> - <li>Cc myself: <input checked type="checkbox" name="cc_myself" /></li> + <li><ul class="errorlist"><li>This field is required.</li></ul>Subject: <input type="text" name="subject" maxlength="100" required></li> + <li>Message: <input type="text" name="message" value="Hi there" required></li> + <li><ul class="errorlist"><li>Enter a valid email address.</li></ul>Sender: <input type="email" name="sender" value="invalid email address" required></li> + <li>Cc myself: <input checked type="checkbox" name="cc_myself"></li> >>> print(f.as_p()) <p><ul class="errorlist"><li>This field is required.</li></ul></p> - <p>Subject: <input type="text" name="subject" maxlength="100" required /></p> - <p>Message: <input type="text" name="message" value="Hi there" required /></p> + <p>Subject: <input type="text" name="subject" maxlength="100" required></p> + <p>Message: <input type="text" name="message" value="Hi there" required></p> <p><ul class="errorlist"><li>Enter a valid email address.</li></ul></p> - <p>Sender: <input type="email" name="sender" value="invalid email address" required /></p> - <p>Cc myself: <input checked type="checkbox" name="cc_myself" /></p> + <p>Sender: <input type="email" name="sender" value="invalid email address" required></p> + <p>Cc myself: <input checked type="checkbox" name="cc_myself"></p> .. _ref-forms-error-list-format: @@ -824,11 +824,11 @@ pass that in at construction time:: >>> f = ContactForm(data, auto_id=False, error_class=DivErrorList) >>> f.as_p() <div class="errorlist"><div class="error">This field is required.</div></div> - <p>Subject: <input type="text" name="subject" maxlength="100" required /></p> - <p>Message: <input type="text" name="message" value="Hi there" required /></p> + <p>Subject: <input type="text" name="subject" maxlength="100" required></p> + <p>Message: <input type="text" name="message" value="Hi there" required></p> <div class="errorlist"><div class="error">Enter a valid email address.</div></div> - <p>Sender: <input type="email" name="sender" value="invalid email address" required /></p> - <p>Cc myself: <input checked type="checkbox" name="cc_myself" /></p> + <p>Sender: <input type="email" name="sender" value="invalid email address" required></p> + <p>Cc myself: <input checked type="checkbox" name="cc_myself"></p> More granular output ==================== @@ -848,25 +848,25 @@ using the field's name as the key:: >>> form = ContactForm() >>> print(form['subject']) - <input id="id_subject" type="text" name="subject" maxlength="100" required /> + <input id="id_subject" type="text" name="subject" maxlength="100" required> To retrieve all ``BoundField`` objects, iterate the form:: >>> form = ContactForm() >>> for boundfield in form: print(boundfield) - <input id="id_subject" type="text" name="subject" maxlength="100" required /> - <input type="text" name="message" id="id_message" required /> - <input type="email" name="sender" id="id_sender" required /> - <input type="checkbox" name="cc_myself" id="id_cc_myself" /> + <input id="id_subject" type="text" name="subject" maxlength="100" required> + <input type="text" name="message" id="id_message" required> + <input type="email" name="sender" id="id_sender" required> + <input type="checkbox" name="cc_myself" id="id_cc_myself"> The field-specific output honors the form object's ``auto_id`` setting:: >>> f = ContactForm(auto_id=False) >>> print(f['message']) - <input type="text" name="message" required /> + <input type="text" name="message" required> >>> f = ContactForm(auto_id='id_%s') >>> print(f['message']) - <input type="text" name="message" id="id_message" required /> + <input type="text" name="message" id="id_message" required> Attributes of ``BoundField`` ---------------------------- @@ -897,7 +897,7 @@ Attributes of ``BoundField`` >>> data = {'subject': 'hi', 'message': '', 'sender': '', 'cc_myself': ''} >>> f = ContactForm(data, auto_id=False) >>> print(f['message']) - <input type="text" name="message" required /> + <input type="text" name="message" required> >>> f['message'].errors ['This field is required.'] >>> print(f['message'].errors) @@ -949,7 +949,7 @@ Attributes of ``BoundField`` .. code-block:: html - <label for="myFIELD">...</label><input id="myFIELD" type="text" name="my_field" required /> + <label for="myFIELD">...</label><input id="myFIELD" type="text" name="my_field" required> .. attribute:: BoundField.is_hidden @@ -1168,11 +1168,11 @@ fields are ordered first:: ... priority = forms.CharField() >>> f = ContactFormWithPriority(auto_id=False) >>> print(f.as_ul()) - <li>Subject: <input type="text" name="subject" maxlength="100" required /></li> - <li>Message: <input type="text" name="message" required /></li> - <li>Sender: <input type="email" name="sender" required /></li> - <li>Cc myself: <input type="checkbox" name="cc_myself" /></li> - <li>Priority: <input type="text" name="priority" required /></li> + <li>Subject: <input type="text" name="subject" maxlength="100" required></li> + <li>Message: <input type="text" name="message" required></li> + <li>Sender: <input type="email" name="sender" required></li> + <li>Cc myself: <input type="checkbox" name="cc_myself"></li> + <li>Priority: <input type="text" name="priority" required></li> It's possible to subclass multiple forms, treating forms as mixins. In this example, ``BeatleForm`` subclasses both ``PersonForm`` and ``InstrumentForm`` @@ -1189,10 +1189,10 @@ classes:: ... haircut_type = forms.CharField() >>> b = BeatleForm(auto_id=False) >>> print(b.as_ul()) - <li>First name: <input type="text" name="first_name" required /></li> - <li>Last name: <input type="text" name="last_name" required /></li> - <li>Instrument: <input type="text" name="instrument" required /></li> - <li>Haircut type: <input type="text" name="haircut_type" required /></li> + <li>First name: <input type="text" name="first_name" required></li> + <li>Last name: <input type="text" name="last_name" required></li> + <li>Instrument: <input type="text" name="instrument" required></li> + <li>Haircut type: <input type="text" name="haircut_type" required></li> It's possible to declaratively remove a ``Field`` inherited from a parent class by setting the name of the field to ``None`` on the subclass. For example:: @@ -1222,11 +1222,11 @@ You can put several Django forms inside one ``<form>`` tag. To give each >>> mother = PersonForm(prefix="mother") >>> father = PersonForm(prefix="father") >>> print(mother.as_ul()) - <li><label for="id_mother-first_name">First name:</label> <input type="text" name="mother-first_name" id="id_mother-first_name" required /></li> - <li><label for="id_mother-last_name">Last name:</label> <input type="text" name="mother-last_name" id="id_mother-last_name" required /></li> + <li><label for="id_mother-first_name">First name:</label> <input type="text" name="mother-first_name" id="id_mother-first_name" required></li> + <li><label for="id_mother-last_name">Last name:</label> <input type="text" name="mother-last_name" id="id_mother-last_name" required></li> >>> print(father.as_ul()) - <li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name" required /></li> - <li><label for="id_father-last_name">Last name:</label> <input type="text" name="father-last_name" id="id_father-last_name" required /></li> + <li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name" required></li> + <li><label for="id_father-last_name">Last name:</label> <input type="text" name="father-last_name" id="id_father-last_name" required></li> The prefix can also be specified on the form class:: diff --git a/docs/ref/forms/fields.txt b/docs/ref/forms/fields.txt index 6c24c3534e..65a231d8e2 100644 --- a/docs/ref/forms/fields.txt +++ b/docs/ref/forms/fields.txt @@ -119,9 +119,9 @@ We've specified ``auto_id=False`` to simplify the output:: ... comment = forms.CharField() >>> f = CommentForm(auto_id=False) >>> print(f) - <tr><th>Your name:</th><td><input type="text" name="name" required /></td></tr> - <tr><th>Your website:</th><td><input type="url" name="url" /></td></tr> - <tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr> + <tr><th>Your name:</th><td><input type="text" name="name" required></td></tr> + <tr><th>Your website:</th><td><input type="url" name="url"></td></tr> + <tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr> ``label_suffix`` ---------------- @@ -137,9 +137,9 @@ The ``label_suffix`` argument lets you override the form's ... captcha_answer = forms.IntegerField(label='2 + 2', label_suffix=' =') >>> f = ContactForm(label_suffix='?') >>> print(f.as_p()) - <p><label for="id_age">Age?</label> <input id="id_age" name="age" type="number" required /></p> - <p><label for="id_nationality">Nationality?</label> <input id="id_nationality" name="nationality" type="text" required /></p> - <p><label for="id_captcha_answer">2 + 2 =</label> <input id="id_captcha_answer" name="captcha_answer" type="number" required /></p> + <p><label for="id_age">Age?</label> <input id="id_age" name="age" type="number" required></p> + <p><label for="id_nationality">Nationality?</label> <input id="id_nationality" name="nationality" type="text" required></p> + <p><label for="id_captcha_answer">2 + 2 =</label> <input id="id_captcha_answer" name="captcha_answer" type="number" required></p> ``initial`` ----------- @@ -161,9 +161,9 @@ field is initialized to a particular value. For example:: ... comment = forms.CharField() >>> f = CommentForm(auto_id=False) >>> print(f) - <tr><th>Name:</th><td><input type="text" name="name" value="Your name" required /></td></tr> - <tr><th>Url:</th><td><input type="url" name="url" value="http://" required /></td></tr> - <tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr> + <tr><th>Name:</th><td><input type="text" name="name" value="Your name" required></td></tr> + <tr><th>Url:</th><td><input type="url" name="url" value="http://" required></td></tr> + <tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr> You may be thinking, why not just pass a dictionary of the initial values as data when displaying the form? Well, if you do that, you'll trigger validation, @@ -176,9 +176,9 @@ and the HTML output will include any validation errors:: >>> default_data = {'name': 'Your name', 'url': 'http://'} >>> f = CommentForm(default_data, auto_id=False) >>> print(f) - <tr><th>Name:</th><td><input type="text" name="name" value="Your name" required /></td></tr> - <tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="url" name="url" value="http://" required /></td></tr> - <tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" required /></td></tr> + <tr><th>Name:</th><td><input type="text" name="name" value="Your name" required></td></tr> + <tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="url" name="url" value="http://" required></td></tr> + <tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" required></td></tr> This is why ``initial`` values are only displayed for unbound forms. For bound forms, the HTML output will use the bound data. @@ -205,7 +205,7 @@ Instead of a constant, you can also pass any callable:: >>> class DateForm(forms.Form): ... day = forms.DateField(initial=datetime.date.today) >>> print(DateForm()) - <tr><th>Day:</th><td><input type="text" name="day" value="12/23/2008" required /><td></tr> + <tr><th>Day:</th><td><input type="text" name="day" value="12/23/2008" required><td></tr> The callable will be evaluated only when the unbound form is displayed, not when it is defined. @@ -241,20 +241,20 @@ fields. We've specified ``auto_id=False`` to simplify the output:: ... cc_myself = forms.BooleanField(required=False) >>> f = HelpTextContactForm(auto_id=False) >>> print(f.as_table()) - <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" required /><br /><span class="helptext">100 characters max.</span></td></tr> - <tr><th>Message:</th><td><input type="text" name="message" required /></td></tr> - <tr><th>Sender:</th><td><input type="email" name="sender" required /><br />A valid email address, please.</td></tr> - <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr> + <tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" required><br><span class="helptext">100 characters max.</span></td></tr> + <tr><th>Message:</th><td><input type="text" name="message" required></td></tr> + <tr><th>Sender:</th><td><input type="email" name="sender" required><br>A valid email address, please.</td></tr> + <tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself"></td></tr> >>> print(f.as_ul())) - <li>Subject: <input type="text" name="subject" maxlength="100" required /> <span class="helptext">100 characters max.</span></li> - <li>Message: <input type="text" name="message" required /></li> - <li>Sender: <input type="email" name="sender" required /> A valid email address, please.</li> - <li>Cc myself: <input type="checkbox" name="cc_myself" /></li> + <li>Subject: <input type="text" name="subject" maxlength="100" required> <span class="helptext">100 characters max.</span></li> + <li>Message: <input type="text" name="message" required></li> + <li>Sender: <input type="email" name="sender" required> A valid email address, please.</li> + <li>Cc myself: <input type="checkbox" name="cc_myself"></li> >>> print(f.as_p()) - <p>Subject: <input type="text" name="subject" maxlength="100" required /> <span class="helptext">100 characters max.</span></p> - <p>Message: <input type="text" name="message" required /></p> - <p>Sender: <input type="email" name="sender" required /> A valid email address, please.</p> - <p>Cc myself: <input type="checkbox" name="cc_myself" /></p> + <p>Subject: <input type="text" name="subject" maxlength="100" required> <span class="helptext">100 characters max.</span></p> + <p>Message: <input type="text" name="message" required></p> + <p>Sender: <input type="email" name="sender" required> A valid email address, please.</p> + <p>Cc myself: <input type="checkbox" name="cc_myself"></p> ``error_messages`` ------------------ diff --git a/docs/ref/forms/widgets.txt b/docs/ref/forms/widgets.txt index dc6256ee06..ee913f0f72 100644 --- a/docs/ref/forms/widgets.txt +++ b/docs/ref/forms/widgets.txt @@ -142,9 +142,9 @@ provided for each widget will be rendered exactly the same:: >>> f = CommentForm(auto_id=False) >>> f.as_table() - <tr><th>Name:</th><td><input type="text" name="name" required /></td></tr> - <tr><th>Url:</th><td><input type="url" name="url" required /></td></tr> - <tr><th>Comment:</th><td><input type="text" name="comment" required /></td></tr> + <tr><th>Name:</th><td><input type="text" name="name" required></td></tr> + <tr><th>Url:</th><td><input type="url" name="url" required></td></tr> + <tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr> On a real Web page, you probably don't want every widget to look the same. You might want a larger input element for the comment, and you might want the @@ -161,9 +161,9 @@ Django will then include the extra attributes in the rendered output: >>> f = CommentForm(auto_id=False) >>> f.as_table() - <tr><th>Name:</th><td><input type="text" name="name" class="special" required /></td></tr> - <tr><th>Url:</th><td><input type="url" name="url" required /></td></tr> - <tr><th>Comment:</th><td><input type="text" name="comment" size="40" required /></td></tr> + <tr><th>Name:</th><td><input type="text" name="name" class="special" required></td></tr> + <tr><th>Url:</th><td><input type="url" name="url" required></td></tr> + <tr><th>Comment:</th><td><input type="text" name="comment" size="40" required></td></tr> You can also set the HTML ``id`` using :attr:`~Widget.attrs`. See :attr:`BoundField.id_for_label` for an example. @@ -211,18 +211,18 @@ foundation for custom widgets. >>> from django import forms >>> name = forms.TextInput(attrs={'size': 10, 'title': 'Your name',}) >>> name.render('name', 'A name') - '<input title="Your name" type="text" name="name" value="A name" size="10" required />' + '<input title="Your name" type="text" name="name" value="A name" size="10" required>' If you assign a value of ``True`` or ``False`` to an attribute, it will be rendered as an HTML5 boolean attribute:: >>> name = forms.TextInput(attrs={'required': True}) >>> name.render('name', 'A name') - '<input name="name" type="text" value="A name" required />' + '<input name="name" type="text" value="A name" required>' >>> >>> name = forms.TextInput(attrs={'required': False}) >>> name.render('name', 'A name') - '<input name="name" type="text" value="A name" />' + '<input name="name" type="text" value="A name">' .. attribute:: Widget.supports_microseconds @@ -701,16 +701,16 @@ that specifies the template used to render each choice. For example, for the .. code-block:: html <div class="myradio"> - <label for="id_beatles_0"><input id="id_beatles_0" name="beatles" type="radio" value="john" required /> John</label> + <label for="id_beatles_0"><input id="id_beatles_0" name="beatles" type="radio" value="john" required> John</label> </div> <div class="myradio"> - <label for="id_beatles_1"><input id="id_beatles_1" name="beatles" type="radio" value="paul" required /> Paul</label> + <label for="id_beatles_1"><input id="id_beatles_1" name="beatles" type="radio" value="paul" required> Paul</label> </div> <div class="myradio"> - <label for="id_beatles_2"><input id="id_beatles_2" name="beatles" type="radio" value="george" required /> George</label> + <label for="id_beatles_2"><input id="id_beatles_2" name="beatles" type="radio" value="george" required> George</label> </div> <div class="myradio"> - <label for="id_beatles_3"><input id="id_beatles_3" name="beatles" type="radio" value="ringo" required /> Ringo</label> + <label for="id_beatles_3"><input id="id_beatles_3" name="beatles" type="radio" value="ringo" required> Ringo</label> </div> That included the ``<label>`` tags. To get more granular, you can use each @@ -732,22 +732,22 @@ that specifies the template used to render each choice. For example, for the <label for="id_beatles_0"> John - <span class="radio"><input id="id_beatles_0" name="beatles" type="radio" value="john" required /></span> + <span class="radio"><input id="id_beatles_0" name="beatles" type="radio" value="john" required></span> </label> <label for="id_beatles_1"> Paul - <span class="radio"><input id="id_beatles_1" name="beatles" type="radio" value="paul" required /></span> + <span class="radio"><input id="id_beatles_1" name="beatles" type="radio" value="paul" required></span> </label> <label for="id_beatles_2"> George - <span class="radio"><input id="id_beatles_2" name="beatles" type="radio" value="george" required /></span> + <span class="radio"><input id="id_beatles_2" name="beatles" type="radio" value="george" required></span> </label> <label for="id_beatles_3"> Ringo - <span class="radio"><input id="id_beatles_3" name="beatles" type="radio" value="ringo" required /></span> + <span class="radio"><input id="id_beatles_3" name="beatles" type="radio" value="ringo" required></span> </label> If you decide not to loop over the radio buttons -- e.g., if your template diff --git a/docs/ref/request-response.txt b/docs/ref/request-response.txt index bc870b101b..e2e8e4cec1 100644 --- a/docs/ref/request-response.txt +++ b/docs/ref/request-response.txt @@ -124,7 +124,7 @@ All attributes should be considered read-only, unless stated otherwise. .. attribute:: HttpRequest.FILES A dictionary-like object containing all uploaded files. Each key in - ``FILES`` is the ``name`` from the ``<input type="file" name="" />``. Each + ``FILES`` is the ``name`` from the ``<input type="file" name="">``. Each value in ``FILES`` is an :class:`~django.core.files.uploadedfile.UploadedFile`. See :doc:`/topics/files` for more information. diff --git a/docs/ref/templates/builtins.txt b/docs/ref/templates/builtins.txt index ec05d16292..6f37b04320 100644 --- a/docs/ref/templates/builtins.txt +++ b/docs/ref/templates/builtins.txt @@ -1192,7 +1192,7 @@ value to a maximum value, and then applies that ratio to a constant. For example:: <img src="bar.png" alt="Bar" - height="10" width="{% widthratio this_value max_value max_width %}" /> + height="10" width="{% widthratio this_value max_value max_width %}"> If ``this_value`` is 175, ``max_value`` is 200, and ``max_width`` is 100, the image in the above example will be 88 pixels wide @@ -1832,14 +1832,14 @@ If ``value`` is ``['a', 'b', 'c', 'd']`` or ``"abcd"``, the output will be -------------- Replaces line breaks in plain text with appropriate HTML; a single -newline becomes an HTML line break (``<br />``) and a new line +newline becomes an HTML line break (``<br>``) and a new line followed by a blank line becomes a paragraph break (``</p>``). For example:: {{ value|linebreaks }} -If ``value`` is ``Joel\nis a slug``, the output will be ``<p>Joel<br />is a +If ``value`` is ``Joel\nis a slug``, the output will be ``<p>Joel<br>is a slug</p>``. .. templatefilter:: linebreaksbr @@ -1848,13 +1848,13 @@ slug</p>``. ---------------- Converts all newlines in a piece of plain text to HTML line breaks -(``<br />``). +(``<br>``). For example:: {{ value|linebreaksbr }} -If ``value`` is ``Joel\nis a slug``, the output will be ``Joel<br />is a +If ``value`` is ``Joel\nis a slug``, the output will be ``Joel<br>is a slug``. .. templatefilter:: linenumbers @@ -2531,20 +2531,20 @@ app is installed, the tag will serve files using ``url()`` method of the storage specified by :setting:`STATICFILES_STORAGE`. For example:: {% load static %} - <img src="{% static "images/hi.jpg" %}" alt="Hi!" /> + <img src="{% static "images/hi.jpg" %}" alt="Hi!"> It is also able to consume standard context variables, e.g. assuming a ``user_stylesheet`` variable is passed to the template:: {% load static %} - <link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen" /> + <link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen"> If you'd like to retrieve a static URL without displaying it, you can use a slightly different call:: {% load static %} {% static "images/hi.jpg" as myphoto %} - <img src="{{ myphoto }}"></img> + <img src="{{ myphoto }}"> .. admonition:: Using Jinja2 templates? @@ -2561,7 +2561,7 @@ over exactly where and how :setting:`STATIC_URL` is injected into the template, you can use the :ttag:`get_static_prefix` template tag:: {% load static %} - <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" /> + <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!"> There's also a second form you can use to avoid extra processing if you need the value multiple times:: @@ -2569,8 +2569,8 @@ the value multiple times:: {% load static %} {% get_static_prefix as STATIC_PREFIX %} - <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" /> - <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" /> + <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!"> + <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!"> .. templatetag:: get_media_prefix diff --git a/docs/ref/templates/language.txt b/docs/ref/templates/language.txt index 806832e061..c6ce3b3dfd 100644 --- a/docs/ref/templates/language.txt +++ b/docs/ref/templates/language.txt @@ -291,7 +291,7 @@ It's easiest to understand template inheritance by starting with an example:: <!DOCTYPE html> <html lang="en"> <head> - <link rel="stylesheet" href="style.css" /> + <link rel="stylesheet" href="style.css"> <title>{% block title %}My amazing site{% endblock %}</title> </head> @@ -344,7 +344,7 @@ like:: <!DOCTYPE html> <html lang="en"> <head> - <link rel="stylesheet" href="style.css" /> + <link rel="stylesheet" href="style.css"> <title>My amazing blog</title> </head> diff --git a/docs/releases/2.1.txt b/docs/releases/2.1.txt index c0bd207445..3465f41ce5 100644 --- a/docs/releases/2.1.txt +++ b/docs/releases/2.1.txt @@ -255,6 +255,10 @@ Miscellaneous :class:`~django.forms.SelectMultiple` widget now uses HTML5 boolean syntax rather than XHTML's ``multiple="multiple"``. +* HTML rendered by form widgets no longer includes a closing slash on void + elements, e.g. ``<br>``. This is incompatible within XHTML, although some + widgets already used aspects of HTML5 such as boolean attributes. + .. _deprecated-features-2.1: Features deprecated in 2.1 diff --git a/docs/topics/auth/default.txt b/docs/topics/auth/default.txt index 3e8a63c25f..a118e56543 100644 --- a/docs/topics/auth/default.txt +++ b/docs/topics/auth/default.txt @@ -1056,8 +1056,8 @@ implementation details see :ref:`using-the-views`. </tr> </table> - <input type="submit" value="login" /> - <input type="hidden" name="next" value="{{ next }}" /> + <input type="submit" value="login"> + <input type="hidden" name="next" value="{{ next }}"> </form> {# Assumes you setup the password_reset view in your URLconf #} diff --git a/docs/topics/forms/formsets.txt b/docs/topics/forms/formsets.txt index 08c0194e53..cb07e7ad59 100644 --- a/docs/topics/forms/formsets.txt +++ b/docs/topics/forms/formsets.txt @@ -29,8 +29,8 @@ would with a regular form:: >>> formset = ArticleFormSet() >>> for form in formset: ... print(form.as_table()) - <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr> - <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr> + <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title"></td></tr> + <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date"></td></tr> As you can see it only displayed one empty form. The number of empty forms that is displayed is controlled by the ``extra`` parameter. By default, @@ -69,12 +69,12 @@ example:: >>> for form in formset: ... print(form.as_table()) - <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Django is now open source" id="id_form-0-title" /></td></tr> - <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-12" id="id_form-0-pub_date" /></td></tr> - <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" id="id_form-1-title" /></td></tr> - <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" id="id_form-1-pub_date" /></td></tr> - <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title" /></td></tr> - <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date" /></td></tr> + <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Django is now open source" id="id_form-0-title"></td></tr> + <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-12" id="id_form-0-pub_date"></td></tr> + <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" id="id_form-1-title"></td></tr> + <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" id="id_form-1-pub_date"></td></tr> + <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title"></td></tr> + <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date"></td></tr> There are now a total of three forms showing above. One for the initial data that was passed in and two extra forms. Also note that we are passing in a @@ -103,8 +103,8 @@ gives you the ability to limit the number of forms the formset will display:: >>> formset = ArticleFormSet() >>> for form in formset: ... print(form.as_table()) - <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr> - <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr> + <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title"></td></tr> + <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date"></td></tr> If the value of ``max_num`` is greater than the number of existing items in the initial data, up to ``extra`` additional blank forms will be added to the @@ -406,15 +406,15 @@ Lets you create a formset with the ability to order:: ... ]) >>> for form in formset: ... print(form.as_table()) - <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Article #1" id="id_form-0-title" /></td></tr> - <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-10" id="id_form-0-pub_date" /></td></tr> - <tr><th><label for="id_form-0-ORDER">Order:</label></th><td><input type="number" name="form-0-ORDER" value="1" id="id_form-0-ORDER" /></td></tr> - <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" value="Article #2" id="id_form-1-title" /></td></tr> - <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" value="2008-05-11" id="id_form-1-pub_date" /></td></tr> - <tr><th><label for="id_form-1-ORDER">Order:</label></th><td><input type="number" name="form-1-ORDER" value="2" id="id_form-1-ORDER" /></td></tr> - <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title" /></td></tr> - <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date" /></td></tr> - <tr><th><label for="id_form-2-ORDER">Order:</label></th><td><input type="number" name="form-2-ORDER" id="id_form-2-ORDER" /></td></tr> + <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Article #1" id="id_form-0-title"></td></tr> + <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-10" id="id_form-0-pub_date"></td></tr> + <tr><th><label for="id_form-0-ORDER">Order:</label></th><td><input type="number" name="form-0-ORDER" value="1" id="id_form-0-ORDER"></td></tr> + <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" value="Article #2" id="id_form-1-title"></td></tr> + <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" value="2008-05-11" id="id_form-1-pub_date"></td></tr> + <tr><th><label for="id_form-1-ORDER">Order:</label></th><td><input type="number" name="form-1-ORDER" value="2" id="id_form-1-ORDER"></td></tr> + <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title"></td></tr> + <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date"></td></tr> + <tr><th><label for="id_form-2-ORDER">Order:</label></th><td><input type="number" name="form-2-ORDER" id="id_form-2-ORDER"></td></tr> This adds an additional field to each form. This new field is named ``ORDER`` and is an ``forms.IntegerField``. For the forms that came from the initial @@ -466,15 +466,15 @@ Lets you create a formset with the ability to select forms for deletion:: ... ]) >>> for form in formset: ... print(form.as_table()) - <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Article #1" id="id_form-0-title" /></td></tr> - <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-10" id="id_form-0-pub_date" /></td></tr> - <tr><th><label for="id_form-0-DELETE">Delete:</label></th><td><input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE" /></td></tr> - <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" value="Article #2" id="id_form-1-title" /></td></tr> - <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" value="2008-05-11" id="id_form-1-pub_date" /></td></tr> - <tr><th><label for="id_form-1-DELETE">Delete:</label></th><td><input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE" /></td></tr> - <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title" /></td></tr> - <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date" /></td></tr> - <tr><th><label for="id_form-2-DELETE">Delete:</label></th><td><input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE" /></td></tr> + <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Article #1" id="id_form-0-title"></td></tr> + <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-10" id="id_form-0-pub_date"></td></tr> + <tr><th><label for="id_form-0-DELETE">Delete:</label></th><td><input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE"></td></tr> + <tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" value="Article #2" id="id_form-1-title"></td></tr> + <tr><th><label for="id_form-1-pub_date">Pub date:</label></th><td><input type="text" name="form-1-pub_date" value="2008-05-11" id="id_form-1-pub_date"></td></tr> + <tr><th><label for="id_form-1-DELETE">Delete:</label></th><td><input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE"></td></tr> + <tr><th><label for="id_form-2-title">Title:</label></th><td><input type="text" name="form-2-title" id="id_form-2-title"></td></tr> + <tr><th><label for="id_form-2-pub_date">Pub date:</label></th><td><input type="text" name="form-2-pub_date" id="id_form-2-pub_date"></td></tr> + <tr><th><label for="id_form-2-DELETE">Delete:</label></th><td><input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE"></td></tr> Similar to ``can_order`` this adds a new field to each form named ``DELETE`` and is a ``forms.BooleanField``. When data comes through marking any of the @@ -540,9 +540,9 @@ default fields/attributes of the order and deletion fields:: >>> formset = ArticleFormSet() >>> for form in formset: ... print(form.as_table()) - <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr> - <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr> - <tr><th><label for="id_form-0-my_field">My field:</label></th><td><input type="text" name="form-0-my_field" id="id_form-0-my_field" /></td></tr> + <tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title"></td></tr> + <tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date"></td></tr> + <tr><th><label for="id_form-0-my_field">My field:</label></th><td><input type="text" name="form-0-my_field" id="id_form-0-my_field"></td></tr> .. _custom-formset-form-kwargs: @@ -592,14 +592,14 @@ For example, in the default case, you might see: .. code-block:: html <label for="id_form-0-title">Title:</label> - <input type="text" name="form-0-title" id="id_form-0-title" /> + <input type="text" name="form-0-title" id="id_form-0-title"> But with ``ArticleFormset(prefix='article')`` that becomes: .. code-block:: html <label for="id_article-0-title">Title:</label> - <input type="text" name="article-0-title" id="id_article-0-title" /> + <input type="text" name="article-0-title" id="id_article-0-title"> This is useful if you want to :ref:`use more than one formset in a view <multiple-formsets-in-view>`. diff --git a/docs/topics/forms/index.txt b/docs/topics/forms/index.txt index 86de7d1b06..71d5a37ed9 100644 --- a/docs/topics/forms/index.txt +++ b/docs/topics/forms/index.txt @@ -259,7 +259,7 @@ The whole form, when rendered for the first time, will look like: .. code-block:: html+django <label for="your_name">Your name: </label> - <input id="your_name" type="text" name="your_name" maxlength="100" required /> + <input id="your_name" type="text" name="your_name" maxlength="100" required> Note that it **does not** include the ``<form>`` tags, or a submit button. We'll have to provide those ourselves in the template. @@ -334,7 +334,7 @@ is: <form action="/your-name/" method="post"> {% csrf_token %} {{ form }} - <input type="submit" value="Submit" /> + <input type="submit" value="Submit"> </form> All the form's fields and their attributes will be unpacked into HTML markup @@ -512,13 +512,13 @@ Here's the output of ``{{ form.as_p }}`` for our ``ContactForm`` instance: .. code-block:: html+django <p><label for="id_subject">Subject:</label> - <input id="id_subject" type="text" name="subject" maxlength="100" required /></p> + <input id="id_subject" type="text" name="subject" maxlength="100" required></p> <p><label for="id_message">Message:</label> <textarea name="message" id="id_message" required></textarea></p> <p><label for="id_sender">Sender:</label> - <input type="email" name="sender" id="id_sender" required /></p> + <input type="email" name="sender" id="id_sender" required></p> <p><label for="id_cc_myself">Cc myself:</label> - <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p> + <input type="checkbox" name="cc_myself" id="id_cc_myself"></p> Note that each form field has an ID attribute set to ``id_<field-name>``, which is referenced by the accompanying label tag. This is important in ensuring that diff --git a/docs/topics/forms/media.txt b/docs/topics/forms/media.txt index 28c5054bc3..6b9165339f 100644 --- a/docs/topics/forms/media.txt +++ b/docs/topics/forms/media.txt @@ -71,7 +71,7 @@ can be retrieved through this property:: >>> w = CalendarWidget() >>> print(w.media) - <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" /> + <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://static.example.com/animations.js"></script> <script type="text/javascript" src="http://static.example.com/actions.js"></script> @@ -114,9 +114,9 @@ requirements:: If this last CSS definition were to be rendered, it would become the following HTML:: - <link href="http://static.example.com/pretty.css" type="text/css" media="screen" rel="stylesheet" /> - <link href="http://static.example.com/lo_res.css" type="text/css" media="tv,projector" rel="stylesheet" /> - <link href="http://static.example.com/newspaper.css" type="text/css" media="print" rel="stylesheet" /> + <link href="http://static.example.com/pretty.css" type="text/css" media="screen" rel="stylesheet"> + <link href="http://static.example.com/lo_res.css" type="text/css" media="tv,projector" rel="stylesheet"> + <link href="http://static.example.com/newspaper.css" type="text/css" media="print" rel="stylesheet"> ``js`` ------ @@ -145,8 +145,8 @@ example above:: >>> w = FancyCalendarWidget() >>> print(w.media) - <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" /> - <link href="http://static.example.com/fancy.css" type="text/css" media="all" rel="stylesheet" /> + <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet"> + <link href="http://static.example.com/fancy.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://static.example.com/animations.js"></script> <script type="text/javascript" src="http://static.example.com/actions.js"></script> <script type="text/javascript" src="http://static.example.com/whizbang.js"></script> @@ -165,7 +165,7 @@ an ``extend=False`` declaration to the ``Media`` declaration:: >>> w = FancyCalendarWidget() >>> print(w.media) - <link href="http://static.example.com/fancy.css" type="text/css" media="all" rel="stylesheet" /> + <link href="http://static.example.com/fancy.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://static.example.com/whizbang.js"></script> If you require even more control over inheritance, define your assets using a @@ -228,7 +228,7 @@ was ``None``:: >>> w = CalendarWidget() >>> print(w.media) - <link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet" /> + <link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://uploads.example.com/animations.js"></script> <script type="text/javascript" src="http://othersite.com/actions.js"></script> @@ -236,7 +236,7 @@ But if :setting:`STATIC_URL` is ``'http://static.example.com/'``:: >>> w = CalendarWidget() >>> print(w.media) - <link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet" /> + <link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://static.example.com/animations.js"></script> <script type="text/javascript" src="http://othersite.com/actions.js"></script> @@ -245,7 +245,7 @@ Or if :mod:`~django.contrib.staticfiles` is configured using the >>> w = CalendarWidget() >>> print(w.media) - <link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet" /> + <link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="https://static.example.com/animations.27e20196a850.js"></script> <script type="text/javascript" src="http://othersite.com/actions.js"></script> @@ -268,12 +268,12 @@ operator to filter out a medium of interest. For example:: >>> w = CalendarWidget() >>> print(w.media) - <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" /> + <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://static.example.com/animations.js"></script> <script type="text/javascript" src="http://static.example.com/actions.js"></script> >>> print(w.media['css']) - <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" /> + <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet"> When you use the subscript operator, the value that is returned is a new ``Media`` object -- but one that only contains the media of interest. @@ -300,7 +300,7 @@ specified by both:: >>> w1 = CalendarWidget() >>> w2 = OtherWidget() >>> print(w1.media + w2.media) - <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" /> + <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://static.example.com/animations.js"></script> <script type="text/javascript" src="http://static.example.com/actions.js"></script> <script type="text/javascript" src="http://static.example.com/whizbang.js"></script> @@ -362,7 +362,7 @@ are part of the form:: >>> f = ContactForm() >>> f.media - <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" /> + <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://static.example.com/animations.js"></script> <script type="text/javascript" src="http://static.example.com/actions.js"></script> <script type="text/javascript" src="http://static.example.com/whizbang.js"></script> @@ -382,8 +382,8 @@ form:: >>> f = ContactForm() >>> f.media - <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" /> - <link href="http://static.example.com/layout.css" type="text/css" media="all" rel="stylesheet" /> + <link href="http://static.example.com/pretty.css" type="text/css" media="all" rel="stylesheet"> + <link href="http://static.example.com/layout.css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="http://static.example.com/animations.js"></script> <script type="text/javascript" src="http://static.example.com/actions.js"></script> <script type="text/javascript" src="http://static.example.com/whizbang.js"></script> diff --git a/docs/topics/forms/modelforms.txt b/docs/topics/forms/modelforms.txt index 3c49e3b8e3..553271e598 100644 --- a/docs/topics/forms/modelforms.txt +++ b/docs/topics/forms/modelforms.txt @@ -770,14 +770,14 @@ with the ``Author`` model. It works just like a regular formset:: >>> formset = AuthorFormSet() >>> print(formset) - <input type="hidden" name="form-TOTAL_FORMS" value="1" id="id_form-TOTAL_FORMS" /><input type="hidden" name="form-INITIAL_FORMS" value="0" id="id_form-INITIAL_FORMS" /><input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS" /> - <tr><th><label for="id_form-0-name">Name:</label></th><td><input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /></td></tr> + <input type="hidden" name="form-TOTAL_FORMS" value="1" id="id_form-TOTAL_FORMS"><input type="hidden" name="form-INITIAL_FORMS" value="0" id="id_form-INITIAL_FORMS"><input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS"> + <tr><th><label for="id_form-0-name">Name:</label></th><td><input id="id_form-0-name" type="text" name="form-0-name" maxlength="100"></td></tr> <tr><th><label for="id_form-0-title">Title:</label></th><td><select name="form-0-title" id="id_form-0-title"> <option value="" selected>---------</option> <option value="MR">Mr.</option> <option value="MRS">Mrs.</option> <option value="MS">Ms.</option> - </select><input type="hidden" name="form-0-id" id="id_form-0-id" /></td></tr> + </select><input type="hidden" name="form-0-id" id="id_form-0-id"></td></tr> .. note:: @@ -959,10 +959,10 @@ so long as the total number of forms does not exceed ``max_num``:: >>> formset = AuthorFormSet(queryset=Author.objects.order_by('name')) >>> for form in formset: ... print(form.as_table()) - <tr><th><label for="id_form-0-name">Name:</label></th><td><input id="id_form-0-name" type="text" name="form-0-name" value="Charles Baudelaire" maxlength="100" /><input type="hidden" name="form-0-id" value="1" id="id_form-0-id" /></td></tr> - <tr><th><label for="id_form-1-name">Name:</label></th><td><input id="id_form-1-name" type="text" name="form-1-name" value="Paul Verlaine" maxlength="100" /><input type="hidden" name="form-1-id" value="3" id="id_form-1-id" /></td></tr> - <tr><th><label for="id_form-2-name">Name:</label></th><td><input id="id_form-2-name" type="text" name="form-2-name" value="Walt Whitman" maxlength="100" /><input type="hidden" name="form-2-id" value="2" id="id_form-2-id" /></td></tr> - <tr><th><label for="id_form-3-name">Name:</label></th><td><input id="id_form-3-name" type="text" name="form-3-name" maxlength="100" /><input type="hidden" name="form-3-id" id="id_form-3-id" /></td></tr> + <tr><th><label for="id_form-0-name">Name:</label></th><td><input id="id_form-0-name" type="text" name="form-0-name" value="Charles Baudelaire" maxlength="100"><input type="hidden" name="form-0-id" value="1" id="id_form-0-id"></td></tr> + <tr><th><label for="id_form-1-name">Name:</label></th><td><input id="id_form-1-name" type="text" name="form-1-name" value="Paul Verlaine" maxlength="100"><input type="hidden" name="form-1-id" value="3" id="id_form-1-id"></td></tr> + <tr><th><label for="id_form-2-name">Name:</label></th><td><input id="id_form-2-name" type="text" name="form-2-name" value="Walt Whitman" maxlength="100"><input type="hidden" name="form-2-id" value="2" id="id_form-2-id"></td></tr> + <tr><th><label for="id_form-3-name">Name:</label></th><td><input id="id_form-3-name" type="text" name="form-3-name" maxlength="100"><input type="hidden" name="form-3-id" id="id_form-3-id"></td></tr> A ``max_num`` value of ``None`` (the default) puts a high limit on the number of forms displayed (1000). In practice this is equivalent to no limit. diff --git a/docs/topics/i18n/timezones.txt b/docs/topics/i18n/timezones.txt index 902dd7aa3a..eb97677777 100644 --- a/docs/topics/i18n/timezones.txt +++ b/docs/topics/i18n/timezones.txt @@ -204,7 +204,7 @@ Include a form in ``template.html`` that will ``POST`` to this view: <option value="{{ tz }}"{% if tz == TIME_ZONE %} selected{% endif %}>{{ tz }}</option> {% endfor %} </select> - <input type="submit" value="Set" /> + <input type="submit" value="Set"> </form> .. _time-zones-in-forms: diff --git a/docs/topics/i18n/translation.txt b/docs/topics/i18n/translation.txt index 305f3a5839..5003bfb997 100644 --- a/docs/topics/i18n/translation.txt +++ b/docs/topics/i18n/translation.txt @@ -610,7 +610,7 @@ filters:: </h1> <p> {% for stage in tour_stages %} - {% cycle start end %}: {{ stage }}{% if forloop.counter|divisibleby:2 %}<br />{% else %}, {% endif %} + {% cycle start end %}: {{ stage }}{% if forloop.counter|divisibleby:2 %}<br>{% else %}, {% endif %} {% endfor %} </p> @@ -891,9 +891,9 @@ use the ``{% get_language_info %}`` tag:: You can then access the information:: - Language code: {{ lang.code }}<br /> - Name of language: {{ lang.name_local }}<br /> - Name in English: {{ lang.name }}<br /> + Language code: {{ lang.code }}<br> + Name of language: {{ lang.name_local }}<br> + Name in English: {{ lang.name }}<br> Bi-directional: {{ lang.bidi }} Name in the active language: {{ lang.name_translated }} @@ -1788,7 +1788,7 @@ Here's example HTML template code: {% load i18n %} <form action="{% url 'set_language' %}" method="post">{% csrf_token %} - <input name="next" type="hidden" value="{{ redirect_to }}" /> + <input name="next" type="hidden" value="{{ redirect_to }}"> <select name="language"> {% get_current_language as LANGUAGE_CODE %} {% get_available_languages as LANGUAGES %} @@ -1799,7 +1799,7 @@ Here's example HTML template code: </option> {% endfor %} </select> - <input type="submit" value="Go" /> + <input type="submit" value="Go"> </form> In this example, Django looks up the URL of the page to which the user will be diff --git a/docs/topics/pagination.txt b/docs/topics/pagination.txt index 81efaafd28..80a6b66fc6 100644 --- a/docs/topics/pagination.txt +++ b/docs/topics/pagination.txt @@ -101,7 +101,7 @@ pages along with any interesting information from the objects themselves:: {% for contact in contacts %} {# Each "contact" is a Contact model object. #} - {{ contact.full_name|upper }}<br /> + {{ contact.full_name|upper }}<br> ... {% endfor %} diff --git a/docs/topics/testing/tools.txt b/docs/topics/testing/tools.txt index c7ae792fb5..d3be9e2124 100644 --- a/docs/topics/testing/tools.txt +++ b/docs/topics/testing/tools.txt @@ -1485,7 +1485,7 @@ your test suite. self.assertHTMLEqual( '<p>Hello <b>world!</p>', '''<p> - Hello <b>world! <b/> + Hello <b>world! </b> </p>''' ) self.assertHTMLEqual( diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py index 5f3d30fd68..5be70ee6ad 100644 --- a/tests/admin_changelist/tests.py +++ b/tests/admin_changelist/tests.py @@ -39,7 +39,7 @@ def build_tbody_html(pk, href, extra_fields): '<tbody><tr class="row1">' '<td class="action-checkbox">' '<input type="checkbox" name="_selected_action" value="{}" ' - 'class="action-select" /></td>' + 'class="action-select"></td>' '<th class="field-name"><a href="{}">name</a></th>' '{}</tr></tbody>' ).format(pk, href, extra_fields) @@ -209,7 +209,7 @@ class ChangeListTests(TestCase): # make sure that hidden fields are in the correct place hiddenfields_div = ( '<div class="hiddenfields">' - '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" />' + '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id">' '</div>' ) % new_child.id self.assertInHTML(hiddenfields_div, table_output, msg_prefix='Failed to find hidden fields') @@ -217,7 +217,7 @@ class ChangeListTests(TestCase): # make sure that list editable fields are rendered in divs correctly editable_name_field = ( '<input name="form-0-name" value="name" class="vTextField" ' - 'maxlength="30" type="text" id="id_form-0-name" />' + 'maxlength="30" type="text" id="id_form-0-name">' ) self.assertInHTML( '<td class="field-name">%s</td>' % editable_name_field, diff --git a/tests/admin_docs/test_views.py b/tests/admin_docs/test_views.py index a64da843ed..be69799d70 100644 --- a/tests/admin_docs/test_views.py +++ b/tests/admin_docs/test_views.py @@ -28,7 +28,7 @@ class AdminDocViewTests(TestDataMixin, AdminDocsTestCase): self.client.logout() response = self.client.get(reverse('django-admindocs-docroot'), follow=True) # Should display the login screen - self.assertContains(response, '<input type="hidden" name="next" value="/admindocs/" />', html=True) + self.assertContains(response, '<input type="hidden" name="next" value="/admindocs/">', html=True) def test_bookmarklets(self): response = self.client.get(reverse('django-admindocs-bookmarklets')) diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py index 67ffa7648f..73b1bd065e 100644 --- a/tests/admin_inlines/tests.py +++ b/tests/admin_inlines/tests.py @@ -161,7 +161,7 @@ class TestInline(TestDataMixin, TestCase): '<img src="/static/admin/img/icon-unknown.svg" ' 'class="help help-tooltip" width="10" height="10" ' 'alt="(Awesome tabular help text is awesome.)" ' - 'title="Awesome tabular help text is awesome." />', + 'title="Awesome tabular help text is awesome.">', 1 ) # ReadOnly fields @@ -171,7 +171,7 @@ class TestInline(TestDataMixin, TestCase): '<img src="/static/admin/img/icon-unknown.svg" ' 'class="help help-tooltip" width="10" height="10" ' 'alt="(Help text for ReadOnlyInline)" ' - 'title="Help text for ReadOnlyInline" />', + 'title="Help text for ReadOnlyInline">', 1 ) @@ -184,7 +184,7 @@ class TestInline(TestDataMixin, TestCase): self.assertNotContains(response, '<td class="field-position">') self.assertInHTML( '<input id="id_somechildmodel_set-1-position" ' - 'name="somechildmodel_set-1-position" type="hidden" value="1" />', + 'name="somechildmodel_set-1-position" type="hidden" value="1">', response.rendered_content, ) @@ -193,26 +193,26 @@ class TestInline(TestDataMixin, TestCase): Multiple inlines with related_name='+' have correct form prefixes. """ response = self.client.get(reverse('admin:admin_inlines_capofamiglia_add')) - self.assertContains(response, '<input type="hidden" name="-1-0-id" id="id_-1-0-id" />', html=True) + self.assertContains(response, '<input type="hidden" name="-1-0-id" id="id_-1-0-id">', html=True) self.assertContains( response, - '<input type="hidden" name="-1-0-capo_famiglia" id="id_-1-0-capo_famiglia" />', + '<input type="hidden" name="-1-0-capo_famiglia" id="id_-1-0-capo_famiglia">', html=True ) self.assertContains( response, - '<input id="id_-1-0-name" type="text" class="vTextField" name="-1-0-name" maxlength="100" />', + '<input id="id_-1-0-name" type="text" class="vTextField" name="-1-0-name" maxlength="100">', html=True ) - self.assertContains(response, '<input type="hidden" name="-2-0-id" id="id_-2-0-id" />', html=True) + self.assertContains(response, '<input type="hidden" name="-2-0-id" id="id_-2-0-id">', html=True) self.assertContains( response, - '<input type="hidden" name="-2-0-capo_famiglia" id="id_-2-0-capo_famiglia" />', + '<input type="hidden" name="-2-0-capo_famiglia" id="id_-2-0-capo_famiglia">', html=True ) self.assertContains( response, - '<input id="id_-2-0-name" type="text" class="vTextField" name="-2-0-name" maxlength="100" />', + '<input id="id_-2-0-name" type="text" class="vTextField" name="-2-0-name" maxlength="100">', html=True ) @@ -265,12 +265,12 @@ class TestInline(TestDataMixin, TestCase): # ModelAdmin max_forms_input = ( '<input id="id_binarytree_set-MAX_NUM_FORMS" ' - 'name="binarytree_set-MAX_NUM_FORMS" type="hidden" value="%d" />' + 'name="binarytree_set-MAX_NUM_FORMS" type="hidden" value="%d">' ) # The total number of forms will remain the same in either case total_forms_hidden = ( '<input id="id_binarytree_set-TOTAL_FORMS" ' - 'name="binarytree_set-TOTAL_FORMS" type="hidden" value="2" />' + 'name="binarytree_set-TOTAL_FORMS" type="hidden" value="2">' ) response = self.client.get(reverse('admin:admin_inlines_binarytree_add')) self.assertInHTML(max_forms_input % 3, response.rendered_content) @@ -293,11 +293,11 @@ class TestInline(TestDataMixin, TestCase): modeladmin.inlines = [MinNumInline] min_forms = ( '<input id="id_binarytree_set-MIN_NUM_FORMS" ' - 'name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="2" />' + 'name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="2">' ) total_forms = ( '<input id="id_binarytree_set-TOTAL_FORMS" ' - 'name="binarytree_set-TOTAL_FORMS" type="hidden" value="5" />' + 'name="binarytree_set-TOTAL_FORMS" type="hidden" value="5">' ) request = self.factory.get(reverse('admin:admin_inlines_binarytree_add')) request.user = User(username='super', is_superuser=True) @@ -322,11 +322,11 @@ class TestInline(TestDataMixin, TestCase): modeladmin.inlines = [MinNumInline] min_forms = ( '<input id="id_binarytree_set-MIN_NUM_FORMS" ' - 'name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="%d" />' + 'name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="%d">' ) total_forms = ( '<input id="id_binarytree_set-TOTAL_FORMS" ' - 'name="binarytree_set-TOTAL_FORMS" type="hidden" value="%d" />' + 'name="binarytree_set-TOTAL_FORMS" type="hidden" value="%d">' ) request = self.factory.get(reverse('admin:admin_inlines_binarytree_add')) request.user = User(username='super', is_superuser=True) @@ -345,13 +345,13 @@ class TestInline(TestDataMixin, TestCase): self.assertContains( response, '<input id="id_nonautopkbook_set-0-rand_pk" ' - 'name="nonautopkbook_set-0-rand_pk" type="hidden" />', + 'name="nonautopkbook_set-0-rand_pk" type="hidden">', html=True ) self.assertContains( response, '<input id="id_nonautopkbook_set-2-0-rand_pk" ' - 'name="nonautopkbook_set-2-0-rand_pk" type="hidden" />', + 'name="nonautopkbook_set-2-0-rand_pk" type="hidden">', html=True ) @@ -360,13 +360,13 @@ class TestInline(TestDataMixin, TestCase): self.assertContains( response, '<input id="id_nonautopkbookchild_set-0-nonautopkbook_ptr" ' - 'name="nonautopkbookchild_set-0-nonautopkbook_ptr" type="hidden" />', + 'name="nonautopkbookchild_set-0-nonautopkbook_ptr" type="hidden">', html=True ) self.assertContains( response, '<input id="id_nonautopkbookchild_set-2-nonautopkbook_ptr" ' - 'name="nonautopkbookchild_set-2-nonautopkbook_ptr" type="hidden" />', + 'name="nonautopkbookchild_set-2-nonautopkbook_ptr" type="hidden">', html=True ) @@ -375,13 +375,13 @@ class TestInline(TestDataMixin, TestCase): self.assertContains( response, '<input class="vIntegerField" id="id_editablepkbook_set-0-manual_pk" ' - 'name="editablepkbook_set-0-manual_pk" type="number" />', + 'name="editablepkbook_set-0-manual_pk" type="number">', html=True, count=1 ) self.assertContains( response, '<input class="vIntegerField" id="id_editablepkbook_set-2-0-manual_pk" ' - 'name="editablepkbook_set-2-0-manual_pk" type="number" />', + 'name="editablepkbook_set-2-0-manual_pk" type="number">', html=True, count=1 ) @@ -614,7 +614,7 @@ class TestInlinePermissions(TestCase): self.assertContains(response, '<h2>Inner2s</h2>') self.assertContains(response, 'Add another Inner2') self.assertContains(response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" ' - 'value="3" name="inner2_set-TOTAL_FORMS" />', html=True) + 'value="3" name="inner2_set-TOTAL_FORMS">', html=True) def test_inline_change_m2m_add_perm(self): permission = Permission.objects.get(codename='add_book', content_type=self.book_ct) @@ -634,11 +634,11 @@ class TestInlinePermissions(TestCase): self.assertContains(response, '<h2>Author-book relationships</h2>') self.assertContains(response, 'Add another Author-book relationship') self.assertContains(response, '<input type="hidden" id="id_Author_books-TOTAL_FORMS" ' - 'value="4" name="Author_books-TOTAL_FORMS" />', html=True) + 'value="4" name="Author_books-TOTAL_FORMS">', html=True) self.assertContains( response, '<input type="hidden" id="id_Author_books-0-id" value="%i" ' - 'name="Author_books-0-id" />' % self.author_book_auto_m2m_intermediate_id, + 'name="Author_books-0-id">' % self.author_book_auto_m2m_intermediate_id, html=True ) self.assertContains(response, 'id="id_Author_books-0-DELETE"') @@ -654,12 +654,12 @@ class TestInlinePermissions(TestCase): self.assertContains( response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="3" ' - 'name="inner2_set-TOTAL_FORMS" />', + 'name="inner2_set-TOTAL_FORMS">', html=True ) self.assertNotContains( response, - '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id, + '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id, html=True ) @@ -671,18 +671,18 @@ class TestInlinePermissions(TestCase): self.assertContains(response, '<h2>Inner2s</h2>') # Just the one form for existing instances self.assertContains( - response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="1" name="inner2_set-TOTAL_FORMS" />', + response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="1" name="inner2_set-TOTAL_FORMS">', html=True ) self.assertContains( response, - '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id, + '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id, html=True ) # max-num 0 means we can't add new ones self.assertContains( response, - '<input type="hidden" id="id_inner2_set-MAX_NUM_FORMS" value="0" name="inner2_set-MAX_NUM_FORMS" />', + '<input type="hidden" id="id_inner2_set-MAX_NUM_FORMS" value="0" name="inner2_set-MAX_NUM_FORMS">', html=True ) @@ -696,12 +696,12 @@ class TestInlinePermissions(TestCase): self.assertContains(response, '<h2>Inner2s</h2>') # One form for existing instance and three extra for new self.assertContains( - response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="4" name="inner2_set-TOTAL_FORMS" />', + response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="4" name="inner2_set-TOTAL_FORMS">', html=True ) self.assertContains( response, - '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id, + '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id, html=True ) @@ -716,12 +716,12 @@ class TestInlinePermissions(TestCase): # One form for existing instance only, no new self.assertContains( response, - '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="1" name="inner2_set-TOTAL_FORMS" />', + '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="1" name="inner2_set-TOTAL_FORMS">', html=True ) self.assertContains( response, - '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id, + '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id, html=True ) self.assertContains(response, 'id="id_inner2_set-0-DELETE"') @@ -739,12 +739,12 @@ class TestInlinePermissions(TestCase): # One form for existing instance only, three for new self.assertContains( response, - '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="4" name="inner2_set-TOTAL_FORMS" />', + '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="4" name="inner2_set-TOTAL_FORMS">', html=True ) self.assertContains( response, - '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id, + '<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id, html=True ) self.assertContains(response, 'id="id_inner2_set-0-DELETE"') diff --git a/tests/admin_utils/tests.py b/tests/admin_utils/tests.py index aae8b74ae2..4d56313ae1 100644 --- a/tests/admin_utils/tests.py +++ b/tests/admin_utils/tests.py @@ -163,7 +163,7 @@ class UtilsTests(SimpleTestCase): # Regression test for #13071: NullBooleanField has special # handling. display_value = display_for_field(None, models.NullBooleanField(), self.empty_value) - expected = '<img src="%sadmin/img/icon-unknown.svg" alt="None" />' % settings.STATIC_URL + expected = '<img src="%sadmin/img/icon-unknown.svg" alt="None">' % settings.STATIC_URL self.assertHTMLEqual(display_value, expected) display_value = display_for_field(None, models.DecimalField(), self.empty_value) @@ -204,11 +204,11 @@ class UtilsTests(SimpleTestCase): def test_list_display_for_value_boolean(self): self.assertEqual( display_for_value(True, '', boolean=True), - '<img src="/static/admin/img/icon-yes.svg" alt="True" />' + '<img src="/static/admin/img/icon-yes.svg" alt="True">' ) self.assertEqual( display_for_value(False, '', boolean=True), - '<img src="/static/admin/img/icon-no.svg" alt="False" />' + '<img src="/static/admin/img/icon-no.svg" alt="False">' ) self.assertEqual(display_for_value(True, ''), 'True') self.assertEqual(display_for_value(False, ''), 'False') diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index b8093c2971..a9746d9add 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -1027,7 +1027,7 @@ class AdminCustomTemplateTests(AdminViewBasicTestCase): # When a site has multiple passwords in the browser's password manager, # a browser pop up asks which user the new password is for. To prevent # this, the username is added to the change password form. - self.assertContains(response, '<input type="text" name="username" value="super" style="display: none" />') + self.assertContains(response, '<input type="text" name="username" value="super" style="display: none">') def test_extended_bodyclass_template_index(self): """ @@ -2969,8 +2969,8 @@ class AdminViewListEditable(TestCase): self.assertContains( response, '<div class="hiddenfields">\n' - '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" />' - '<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" />\n</div>' + '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id">' + '<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id">\n</div>' % (story2.id, story1.id), html=True ) @@ -2999,8 +2999,8 @@ class AdminViewListEditable(TestCase): self.assertContains( response, '<div class="hiddenfields">\n' - '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" />' - '<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" />\n</div>' + '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id">' + '<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id">\n</div>' % (story2.id, story1.id), html=True ) @@ -3057,7 +3057,7 @@ class AdminSearchTest(TestCase): """ response = self.client.get(reverse('admin:auth_user_changelist') + '?q=joe&%s=id' % TO_FIELD_VAR) self.assertContains(response, "\n1 user\n") - self.assertContains(response, '<input type="hidden" name="%s" value="id"/>' % TO_FIELD_VAR, html=True) + self.assertContains(response, '<input type="hidden" name="%s" value="id">' % TO_FIELD_VAR, html=True) def test_exact_matches(self): response = self.client.get(reverse('admin:admin_views_recommendation_changelist') + '?q=bar') @@ -4388,10 +4388,10 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase): self.assertContains(response, "Unknown coolness.") self.assertContains(response, "foo") - # Multiline text in a readonly field gets <br /> tags - self.assertContains(response, 'Multiline<br />test<br />string') - self.assertContains(response, '<div class="readonly">Multiline<br />html<br />content</div>', html=True) - self.assertContains(response, 'InlineMultiline<br />test<br />string') + # Multiline text in a readonly field gets <br> tags + self.assertContains(response, 'Multiline<br>test<br>string') + self.assertContains(response, '<div class="readonly">Multiline<br>html<br>content</div>', html=True) + self.assertContains(response, 'InlineMultiline<br>test<br>string') self.assertContains(response, formats.localize(datetime.date.today() - datetime.timedelta(days=7))) @@ -4432,9 +4432,9 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase): ) response = self.client.get(reverse('admin:admin_views_post_change', args=(p.pk,))) # Checking readonly field. - self.assertContains(response, 'test<br /><br />test<br /><br />test<br /><br />test') + self.assertContains(response, 'test<br><br>test<br><br>test<br><br>test') # Checking readonly field in inline. - self.assertContains(response, 'test<br />link') + self.assertContains(response, 'test<br>link') def test_readonly_post(self): data = { @@ -5267,7 +5267,7 @@ class AdminViewLogoutTests(TestCase): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, 'admin/login.html') self.assertEqual(response.request['PATH_INFO'], reverse('admin:login')) - self.assertContains(response, '<input type="hidden" name="next" value="%s" />' % reverse('admin:index')) + self.assertContains(response, '<input type="hidden" name="next" value="%s">' % reverse('admin:index')) @override_settings(ROOT_URLCONF='admin_views.urls') diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py index 8c3f06670c..c0a9e1e844 100644 --- a/tests/admin_widgets/tests.py +++ b/tests/admin_widgets/tests.py @@ -274,13 +274,13 @@ class AdminDateWidgetTest(SimpleTestCase): w = widgets.AdminDateWidget() self.assertHTMLEqual( w.render('test', datetime(2007, 12, 1, 9, 30)), - '<input value="2007-12-01" type="text" class="vDateField" name="test" size="10" />', + '<input value="2007-12-01" type="text" class="vDateField" name="test" size="10">', ) # pass attrs to widget w = widgets.AdminDateWidget(attrs={'size': 20, 'class': 'myDateField'}) self.assertHTMLEqual( w.render('test', datetime(2007, 12, 1, 9, 30)), - '<input value="2007-12-01" type="text" class="myDateField" name="test" size="20" />', + '<input value="2007-12-01" type="text" class="myDateField" name="test" size="20">', ) @@ -289,13 +289,13 @@ class AdminTimeWidgetTest(SimpleTestCase): w = widgets.AdminTimeWidget() self.assertHTMLEqual( w.render('test', datetime(2007, 12, 1, 9, 30)), - '<input value="09:30:00" type="text" class="vTimeField" name="test" size="8" />', + '<input value="09:30:00" type="text" class="vTimeField" name="test" size="8">', ) # pass attrs to widget w = widgets.AdminTimeWidget(attrs={'size': 20, 'class': 'myTimeField'}) self.assertHTMLEqual( w.render('test', datetime(2007, 12, 1, 9, 30)), - '<input value="09:30:00" type="text" class="myTimeField" name="test" size="20" />', + '<input value="09:30:00" type="text" class="myTimeField" name="test" size="20">', ) @@ -306,9 +306,9 @@ class AdminSplitDateTimeWidgetTest(SimpleTestCase): w.render('test', datetime(2007, 12, 1, 9, 30)), '<p class="datetime">' 'Date: <input value="2007-12-01" type="text" class="vDateField" ' - 'name="test_0" size="10" /><br />' + 'name="test_0" size="10"><br>' 'Time: <input value="09:30:00" type="text" class="vTimeField" ' - 'name="test_1" size="8" /></p>' + 'name="test_1" size="8"></p>' ) def test_localization(self): @@ -320,9 +320,9 @@ class AdminSplitDateTimeWidgetTest(SimpleTestCase): w.render('test', datetime(2007, 12, 1, 9, 30)), '<p class="datetime">' 'Datum: <input value="01.12.2007" type="text" ' - 'class="vDateField" name="test_0"size="10" /><br />' + 'class="vDateField" name="test_0"size="10"><br>' 'Zeit: <input value="09:30:00" type="text" class="vTimeField" ' - 'name="test_1" size="8" /></p>' + 'name="test_1" size="8"></p>' ) @@ -331,14 +331,14 @@ class AdminURLWidgetTest(SimpleTestCase): w = widgets.AdminURLFieldWidget() self.assertHTMLEqual( w.render('test', ''), - '<input class="vURLField" name="test" type="url" />' + '<input class="vURLField" name="test" type="url">' ) self.assertHTMLEqual( w.render('test', 'http://example.com'), '<p class="url">Currently:<a href="http://example.com">' - 'http://example.com</a><br />' + 'http://example.com</a><br>' 'Change:<input class="vURLField" name="test" type="url" ' - 'value="http://example.com" /></p>' + 'value="http://example.com"></p>' ) def test_render_idn(self): @@ -346,9 +346,9 @@ class AdminURLWidgetTest(SimpleTestCase): self.assertHTMLEqual( w.render('test', 'http://example-äüö.com'), '<p class="url">Currently: <a href="http://xn--example--7za4pnc.com">' - 'http://example-äüö.com</a><br />' + 'http://example-äüö.com</a><br>' 'Change:<input class="vURLField" name="test" type="url" ' - 'value="http://example-äüö.com" /></p>' + 'value="http://example-äüö.com"></p>' ) def test_render_quoting(self): @@ -420,15 +420,15 @@ class AdminFileWidgetTests(TestDataMixin, TestCase): '<p class="file-upload">Currently: <a href="%(STORAGE_URL)salbums/' r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a> ' '<span class="clearable-file-input">' - '<input type="checkbox" name="test-clear" id="test-clear_id" /> ' - '<label for="test-clear_id">Clear</label></span><br />' - 'Change: <input type="file" name="test" /></p>' % { + '<input type="checkbox" name="test-clear" id="test-clear_id"> ' + '<label for="test-clear_id">Clear</label></span><br>' + 'Change: <input type="file" name="test"></p>' % { 'STORAGE_URL': default_storage.url(''), }, ) self.assertHTMLEqual( w.render('test', SimpleUploadedFile('test', b'content')), - '<input type="file" name="test" />', + '<input type="file" name="test">', ) def test_render_required(self): @@ -437,8 +437,8 @@ class AdminFileWidgetTests(TestDataMixin, TestCase): self.assertHTMLEqual( widget.render('test', self.album.cover_art), '<p class="file-upload">Currently: <a href="%(STORAGE_URL)salbums/' - r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a><br />' - 'Change: <input type="file" name="test" /></p>' % { + r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a><br>' + 'Change: <input type="file" name="test"></p>' % { 'STORAGE_URL': default_storage.url(''), }, ) @@ -457,7 +457,7 @@ class AdminFileWidgetTests(TestDataMixin, TestCase): ) self.assertNotContains( response, - '<input type="file" name="cover_art" id="id_cover_art" />', + '<input type="file" name="cover_art" id="id_cover_art">', html=True, ) response = self.client.get(reverse('admin:admin_widgets_album_add')) @@ -482,7 +482,7 @@ class ForeignKeyRawIdWidgetTest(TestCase): self.assertHTMLEqual( w.render('test', band.pk, attrs={}), '<input type="text" name="test" value="%(bandpk)s" ' - 'class="vForeignKeyRawIdAdminField" />' + 'class="vForeignKeyRawIdAdminField">' '<a href="/admin_widgets/band/?_to_field=id" class="related-lookup" ' 'id="lookup_id_test" title="Lookup"></a> <strong>' '<a href="/admin_widgets/band/%(bandpk)s/change/">Linkin Park</a>' @@ -502,7 +502,7 @@ class ForeignKeyRawIdWidgetTest(TestCase): self.assertHTMLEqual( w.render('test', core.parent_id, attrs={}), '<input type="text" name="test" value="86" ' - 'class="vForeignKeyRawIdAdminField" />' + 'class="vForeignKeyRawIdAdminField">' '<a href="/admin_widgets/inventory/?_to_field=barcode" ' 'class="related-lookup" id="lookup_id_test" title="Lookup"></a>' ' <strong><a href="/admin_widgets/inventory/%(pk)s/change/">' @@ -519,7 +519,7 @@ class ForeignKeyRawIdWidgetTest(TestCase): w = widgets.ForeignKeyRawIdWidget(rel, widget_admin_site) self.assertHTMLEqual( w.render('honeycomb_widget', big_honeycomb.pk, attrs={}), - '<input type="text" name="honeycomb_widget" value="%(hcombpk)s" />' + '<input type="text" name="honeycomb_widget" value="%(hcombpk)s">' ' <strong>%(hcomb)s</strong>' % {'hcombpk': big_honeycomb.pk, 'hcomb': big_honeycomb} ) @@ -534,7 +534,7 @@ class ForeignKeyRawIdWidgetTest(TestCase): w = widgets.ForeignKeyRawIdWidget(rel, widget_admin_site) self.assertHTMLEqual( w.render('individual_widget', subject1.pk, attrs={}), - '<input type="text" name="individual_widget" value="%(subj1pk)s" />' + '<input type="text" name="individual_widget" value="%(subj1pk)s">' ' <strong>%(subj1)s</strong>' % {'subj1pk': subject1.pk, 'subj1': subject1} ) @@ -552,7 +552,7 @@ class ForeignKeyRawIdWidgetTest(TestCase): ) self.assertHTMLEqual( w.render('test', child_of_hidden.parent_id, attrs={}), - '<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" />' + '<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField">' '<a href="/admin_widgets/inventory/?_to_field=barcode" ' 'class="related-lookup" id="lookup_id_test" title="Lookup"></a>' ' <strong><a href="/admin_widgets/inventory/%(pk)s/change/">' @@ -574,7 +574,7 @@ class ManyToManyRawIdWidgetTest(TestCase): w = widgets.ManyToManyRawIdWidget(rel, widget_admin_site) self.assertHTMLEqual( w.render('test', [m1.pk, m2.pk], attrs={}), ( - '<input type="text" name="test" value="%(m1pk)s,%(m2pk)s" class="vManyToManyRawIdAdminField" />' + '<input type="text" name="test" value="%(m1pk)s,%(m2pk)s" class="vManyToManyRawIdAdminField">' '<a href="/admin_widgets/member/" class="related-lookup" id="lookup_id_test" title="Lookup"></a>' ) % {'m1pk': m1.pk, 'm2pk': m2.pk} ) @@ -599,12 +599,12 @@ class ManyToManyRawIdWidgetTest(TestCase): w = widgets.ManyToManyRawIdWidget(rel, widget_admin_site) self.assertHTMLEqual( w.render('company_widget1', [c1.pk, c2.pk], attrs={}), - '<input type="text" name="company_widget1" value="%(c1pk)s,%(c2pk)s" />' % {'c1pk': c1.pk, 'c2pk': c2.pk} + '<input type="text" name="company_widget1" value="%(c1pk)s,%(c2pk)s">' % {'c1pk': c1.pk, 'c2pk': c2.pk} ) self.assertHTMLEqual( w.render('company_widget2', [c1.pk]), - '<input type="text" name="company_widget2" value="%(c1pk)s" />' % {'c1pk': c1.pk} + '<input type="text" name="company_widget2" value="%(c1pk)s">' % {'c1pk': c1.pk} ) diff --git a/tests/csrf_tests/views.py b/tests/csrf_tests/views.py index 720de610e0..89d1189e0d 100644 --- a/tests/csrf_tests/views.py +++ b/tests/csrf_tests/views.py @@ -8,7 +8,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie def post_form_view(request): """Return a POST form (without a token).""" return HttpResponse(content=""" -<html><body><h1>\u00a1Unicode!<form method="post"><input type="text" /></form></body></html> +<html><body><h1>\u00a1Unicode!<form method="post"><input type="text"></form></body></html> """, mimetype='text/html') diff --git a/tests/forms_tests/field_tests/test_charfield.py b/tests/forms_tests/field_tests/test_charfield.py index ad91070571..cbacf4d0d7 100644 --- a/tests/forms_tests/field_tests/test_charfield.py +++ b/tests/forms_tests/field_tests/test_charfield.py @@ -145,7 +145,7 @@ class CharFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_charfield_disabled(self): f = CharField(disabled=True) - self.assertWidgetRendersTo(f, '<input type="text" name="f" id="id_f" disabled required />') + self.assertWidgetRendersTo(f, '<input type="text" name="f" id="id_f" disabled required>') def test_null_characters_prohibited(self): f = CharField() diff --git a/tests/forms_tests/field_tests/test_datefield.py b/tests/forms_tests/field_tests/test_datefield.py index a8002d463c..bcc7db193a 100644 --- a/tests/forms_tests/field_tests/test_datefield.py +++ b/tests/forms_tests/field_tests/test_datefield.py @@ -22,7 +22,7 @@ class DateFieldTest(SimpleTestCase): # accept the input from the "as_hidden" rendering as well. self.assertHTMLEqual( a['mydate'].as_hidden(), - '<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate" />', + '<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate">', ) b = GetDate({'mydate': '2008-4-1'}) diff --git a/tests/forms_tests/field_tests/test_decimalfield.py b/tests/forms_tests/field_tests/test_decimalfield.py index 4e1828d53d..44ebebcf75 100644 --- a/tests/forms_tests/field_tests/test_decimalfield.py +++ b/tests/forms_tests/field_tests/test_decimalfield.py @@ -11,7 +11,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_decimalfield_1(self): f = DecimalField(max_digits=4, decimal_places=2) - self.assertWidgetRendersTo(f, '<input id="id_f" step="0.01" type="number" name="f" required />') + self.assertWidgetRendersTo(f, '<input id="id_f" step="0.01" type="number" name="f" required>') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean('') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): @@ -78,7 +78,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase): ) self.assertWidgetRendersTo( f, - '<input step="0.01" name="f" min="0.5" max="1.5" type="number" id="id_f" required />', + '<input step="0.01" name="f" min="0.5" max="1.5" type="number" id="id_f" required>', ) with self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 1.5.'"): f.clean('1.6') @@ -136,7 +136,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase): f = DecimalField(max_digits=20) self.assertEqual(f.widget_attrs(NumberInput()), {'step': 'any'}) f = DecimalField(max_digits=6, widget=NumberInput(attrs={'step': '0.01'})) - self.assertWidgetRendersTo(f, '<input step="0.01" name="f" type="number" id="id_f" required />') + self.assertWidgetRendersTo(f, '<input step="0.01" name="f" type="number" id="id_f" required>') def test_decimalfield_localized(self): """ @@ -144,7 +144,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase): number input specific attributes. """ f = DecimalField(localize=True) - self.assertWidgetRendersTo(f, '<input id="id_f" name="f" type="text" required />') + self.assertWidgetRendersTo(f, '<input id="id_f" name="f" type="text" required>') def test_decimalfield_changed(self): f = DecimalField(max_digits=2, decimal_places=2) diff --git a/tests/forms_tests/field_tests/test_emailfield.py b/tests/forms_tests/field_tests/test_emailfield.py index 15481689b0..826524ae62 100644 --- a/tests/forms_tests/field_tests/test_emailfield.py +++ b/tests/forms_tests/field_tests/test_emailfield.py @@ -8,7 +8,7 @@ class EmailFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_emailfield_1(self): f = EmailField() - self.assertWidgetRendersTo(f, '<input type="email" name="f" id="id_f" required />') + self.assertWidgetRendersTo(f, '<input type="email" name="f" id="id_f" required>') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean('') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): @@ -41,7 +41,7 @@ class EmailFieldTest(FormFieldAssertionsMixin, SimpleTestCase): f = EmailField(min_length=10, max_length=15) self.assertWidgetRendersTo( f, - '<input id="id_f" type="email" name="f" maxlength="15" minlength="10" required />', + '<input id="id_f" type="email" name="f" maxlength="15" minlength="10" required>', ) with self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 10 characters (it has 9).'"): f.clean('a@foo.com') diff --git a/tests/forms_tests/field_tests/test_floatfield.py b/tests/forms_tests/field_tests/test_floatfield.py index b36942afa4..531396868a 100644 --- a/tests/forms_tests/field_tests/test_floatfield.py +++ b/tests/forms_tests/field_tests/test_floatfield.py @@ -10,7 +10,7 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_floatfield_1(self): f = FloatField() - self.assertWidgetRendersTo(f, '<input step="any" type="number" name="f" id="id_f" required />') + self.assertWidgetRendersTo(f, '<input step="any" type="number" name="f" id="id_f" required>') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean('') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): @@ -49,7 +49,7 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase): f = FloatField(max_value=1.5, min_value=0.5) self.assertWidgetRendersTo( f, - '<input step="any" name="f" min="0.5" max="1.5" type="number" id="id_f" required />', + '<input step="any" name="f" min="0.5" max="1.5" type="number" id="id_f" required>', ) with self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 1.5.'"): f.clean('1.6') @@ -64,7 +64,7 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase): f = FloatField(widget=NumberInput(attrs={'step': 0.01, 'max': 1.0, 'min': 0.0})) self.assertWidgetRendersTo( f, - '<input step="0.01" name="f" min="0.0" max="1.0" type="number" id="id_f" required />', + '<input step="0.01" name="f" min="0.0" max="1.0" type="number" id="id_f" required>', ) def test_floatfield_localized(self): @@ -73,7 +73,7 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase): number input specific attributes. """ f = FloatField(localize=True) - self.assertWidgetRendersTo(f, '<input id="id_f" name="f" type="text" required />') + self.assertWidgetRendersTo(f, '<input id="id_f" name="f" type="text" required>') def test_floatfield_changed(self): f = FloatField() diff --git a/tests/forms_tests/field_tests/test_integerfield.py b/tests/forms_tests/field_tests/test_integerfield.py index f89885027b..a0cde40910 100644 --- a/tests/forms_tests/field_tests/test_integerfield.py +++ b/tests/forms_tests/field_tests/test_integerfield.py @@ -8,7 +8,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_integerfield_1(self): f = IntegerField() - self.assertWidgetRendersTo(f, '<input type="number" name="f" id="id_f" required />') + self.assertWidgetRendersTo(f, '<input type="number" name="f" id="id_f" required>') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean('') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): @@ -50,7 +50,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_integerfield_3(self): f = IntegerField(max_value=10) - self.assertWidgetRendersTo(f, '<input max="10" type="number" name="f" id="id_f" required />') + self.assertWidgetRendersTo(f, '<input max="10" type="number" name="f" id="id_f" required>') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean(None) self.assertEqual(1, f.clean(1)) @@ -65,7 +65,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_integerfield_4(self): f = IntegerField(min_value=10) - self.assertWidgetRendersTo(f, '<input id="id_f" type="number" name="f" min="10" required />') + self.assertWidgetRendersTo(f, '<input id="id_f" type="number" name="f" min="10" required>') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean(None) with self.assertRaisesMessage(ValidationError, "'Ensure this value is greater than or equal to 10.'"): @@ -79,7 +79,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_integerfield_5(self): f = IntegerField(min_value=10, max_value=20) - self.assertWidgetRendersTo(f, '<input id="id_f" max="20" type="number" name="f" min="10" required />') + self.assertWidgetRendersTo(f, '<input id="id_f" max="20" type="number" name="f" min="10" required>') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean(None) with self.assertRaisesMessage(ValidationError, "'Ensure this value is greater than or equal to 10.'"): @@ -100,7 +100,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase): number input specific attributes. """ f1 = IntegerField(localize=True) - self.assertWidgetRendersTo(f1, '<input id="id_f" name="f" type="text" required />') + self.assertWidgetRendersTo(f1, '<input id="id_f" name="f" type="text" required>') def test_integerfield_float(self): f = IntegerField() diff --git a/tests/forms_tests/field_tests/test_multivaluefield.py b/tests/forms_tests/field_tests/test_multivaluefield.py index edb32957e3..fb99451f6c 100644 --- a/tests/forms_tests/field_tests/test_multivaluefield.py +++ b/tests/forms_tests/field_tests/test_multivaluefield.py @@ -128,15 +128,15 @@ class MultiValueFieldTest(SimpleTestCase): form.as_table(), """ <tr><th><label for="id_field1_0">Field1:</label></th> - <td><input type="text" name="field1_0" id="id_field1_0" required /> + <td><input type="text" name="field1_0" id="id_field1_0" required> <select multiple name="field1_1" id="id_field1_1" required> <option value="J">John</option> <option value="P">Paul</option> <option value="G">George</option> <option value="R">Ringo</option> </select> - <input type="text" name="field1_2_0" id="id_field1_2_0" required /> - <input type="text" name="field1_2_1" id="id_field1_2_1" required /></td></tr> + <input type="text" name="field1_2_0" id="id_field1_2_0" required> + <input type="text" name="field1_2_1" id="id_field1_2_1" required></td></tr> """, ) @@ -151,15 +151,15 @@ class MultiValueFieldTest(SimpleTestCase): form.as_table(), """ <tr><th><label for="id_field1_0">Field1:</label></th> - <td><input type="text" name="field1_0" value="some text" id="id_field1_0" required /> + <td><input type="text" name="field1_0" value="some text" id="id_field1_0" required> <select multiple name="field1_1" id="id_field1_1" required> <option value="J" selected>John</option> <option value="P" selected>Paul</option> <option value="G">George</option> <option value="R">Ringo</option> </select> - <input type="text" name="field1_2_0" value="2007-04-25" id="id_field1_2_0" required /> - <input type="text" name="field1_2_1" value="06:24:00" id="id_field1_2_1" required /></td></tr> + <input type="text" name="field1_2_0" value="2007-04-25" id="id_field1_2_0" required> + <input type="text" name="field1_2_1" value="06:24:00" id="id_field1_2_1" required></td></tr> """, ) diff --git a/tests/forms_tests/field_tests/test_nullbooleanfield.py b/tests/forms_tests/field_tests/test_nullbooleanfield.py index ff57394f07..55812612c9 100644 --- a/tests/forms_tests/field_tests/test_nullbooleanfield.py +++ b/tests/forms_tests/field_tests/test_nullbooleanfield.py @@ -27,8 +27,8 @@ class NullBooleanFieldTest(FormFieldAssertionsMixin, SimpleTestCase): hidden_nullbool2 = NullBooleanField(widget=HiddenInput, initial=False) f = HiddenNullBooleanForm() self.assertHTMLEqual( - '<input type="hidden" name="hidden_nullbool1" value="True" id="id_hidden_nullbool1" />' - '<input type="hidden" name="hidden_nullbool2" value="False" id="id_hidden_nullbool2" />', + '<input type="hidden" name="hidden_nullbool1" value="True" id="id_hidden_nullbool1">' + '<input type="hidden" name="hidden_nullbool2" value="False" id="id_hidden_nullbool2">', str(f) ) diff --git a/tests/forms_tests/field_tests/test_urlfield.py b/tests/forms_tests/field_tests/test_urlfield.py index 2ecf189112..52f1080cdc 100644 --- a/tests/forms_tests/field_tests/test_urlfield.py +++ b/tests/forms_tests/field_tests/test_urlfield.py @@ -8,7 +8,7 @@ class URLFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_urlfield_1(self): f = URLField() - self.assertWidgetRendersTo(f, '<input type="url" name="f" id="id_f" required />') + self.assertWidgetRendersTo(f, '<input type="url" name="f" id="id_f" required>') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): f.clean('') with self.assertRaisesMessage(ValidationError, "'This field is required.'"): @@ -88,7 +88,7 @@ class URLFieldTest(FormFieldAssertionsMixin, SimpleTestCase): def test_urlfield_5(self): f = URLField(min_length=15, max_length=20) - self.assertWidgetRendersTo(f, '<input id="id_f" type="url" name="f" maxlength="20" minlength="15" required />') + self.assertWidgetRendersTo(f, '<input id="id_f" type="url" name="f" maxlength="20" minlength="15" required>') with self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 15 characters (it has 12).'"): f.clean('http://f.com') self.assertEqual('http://example.com', f.clean('http://example.com')) diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index 4ec21f869e..1f883e1a28 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -59,15 +59,15 @@ class FormsTestCase(SimpleTestCase): self.assertEqual(p.cleaned_data["birthday"], datetime.date(1940, 10, 9)) self.assertHTMLEqual( str(p['first_name']), - '<input type="text" name="first_name" value="John" id="id_first_name" required />' + '<input type="text" name="first_name" value="John" id="id_first_name" required>' ) self.assertHTMLEqual( str(p['last_name']), - '<input type="text" name="last_name" value="Lennon" id="id_last_name" required />' + '<input type="text" name="last_name" value="Lennon" id="id_last_name" required>' ) self.assertHTMLEqual( str(p['birthday']), - '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required />' + '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required>' ) msg = "Key 'nonexistentfield' not found in 'Person'. Choices are: birthday, first_name, last_name." @@ -81,9 +81,9 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( '\n'.join(form_output), - """<input type="text" name="first_name" value="John" id="id_first_name" required /> -<input type="text" name="last_name" value="Lennon" id="id_last_name" required /> -<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required />""" + """<input type="text" name="first_name" value="John" id="id_first_name" required> +<input type="text" name="last_name" value="Lennon" id="id_last_name" required> +<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required>""" ) form_output = [] @@ -99,11 +99,11 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( str(p), """<tr><th><label for="id_first_name">First name:</label></th><td> -<input type="text" name="first_name" value="John" id="id_first_name" required /></td></tr> +<input type="text" name="first_name" value="John" id="id_first_name" required></td></tr> <tr><th><label for="id_last_name">Last name:</label></th><td> -<input type="text" name="last_name" value="Lennon" id="id_last_name" required /></td></tr> +<input type="text" name="last_name" value="Lennon" id="id_last_name" required></td></tr> <tr><th><label for="id_birthday">Birthday:</label></th><td> -<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required /></td></tr>""" +<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required></td></tr>""" ) def test_empty_dict(self): @@ -119,49 +119,49 @@ class FormsTestCase(SimpleTestCase): str(p), """<tr><th><label for="id_first_name">First name:</label></th><td> <ul class="errorlist"><li>This field is required.</li></ul> -<input type="text" name="first_name" id="id_first_name" required /></td></tr> +<input type="text" name="first_name" id="id_first_name" required></td></tr> <tr><th><label for="id_last_name">Last name:</label></th> <td><ul class="errorlist"><li>This field is required.</li></ul> -<input type="text" name="last_name" id="id_last_name" required /></td></tr> +<input type="text" name="last_name" id="id_last_name" required></td></tr> <tr><th><label for="id_birthday">Birthday:</label></th><td> <ul class="errorlist"><li>This field is required.</li></ul> -<input type="text" name="birthday" id="id_birthday" required /></td></tr>""" +<input type="text" name="birthday" id="id_birthday" required></td></tr>""" ) self.assertHTMLEqual( p.as_table(), """<tr><th><label for="id_first_name">First name:</label></th><td> <ul class="errorlist"><li>This field is required.</li></ul> -<input type="text" name="first_name" id="id_first_name" required /></td></tr> +<input type="text" name="first_name" id="id_first_name" required></td></tr> <tr><th><label for="id_last_name">Last name:</label></th> <td><ul class="errorlist"><li>This field is required.</li></ul> -<input type="text" name="last_name" id="id_last_name" required /></td></tr> +<input type="text" name="last_name" id="id_last_name" required></td></tr> <tr><th><label for="id_birthday">Birthday:</label></th> <td><ul class="errorlist"><li>This field is required.</li></ul> -<input type="text" name="birthday" id="id_birthday" required /></td></tr>""" +<input type="text" name="birthday" id="id_birthday" required></td></tr>""" ) self.assertHTMLEqual( p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul> <label for="id_first_name">First name:</label> -<input type="text" name="first_name" id="id_first_name" required /></li> +<input type="text" name="first_name" id="id_first_name" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> <label for="id_last_name">Last name:</label> -<input type="text" name="last_name" id="id_last_name" required /></li> +<input type="text" name="last_name" id="id_last_name" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> <label for="id_birthday">Birthday:</label> -<input type="text" name="birthday" id="id_birthday" required /></li>""" +<input type="text" name="birthday" id="id_birthday" required></li>""" ) self.assertHTMLEqual( p.as_p(), """<ul class="errorlist"><li>This field is required.</li></ul> <p><label for="id_first_name">First name:</label> -<input type="text" name="first_name" id="id_first_name" required /></p> +<input type="text" name="first_name" id="id_first_name" required></p> <ul class="errorlist"><li>This field is required.</li></ul> <p><label for="id_last_name">Last name:</label> -<input type="text" name="last_name" id="id_last_name" required /></p> +<input type="text" name="last_name" id="id_last_name" required></p> <ul class="errorlist"><li>This field is required.</li></ul> <p><label for="id_birthday">Birthday:</label> -<input type="text" name="birthday" id="id_birthday" required /></p>""" +<input type="text" name="birthday" id="id_birthday" required></p>""" ) def test_empty_querydict_args(self): @@ -185,38 +185,38 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( str(p), """<tr><th><label for="id_first_name">First name:</label></th><td> -<input type="text" name="first_name" id="id_first_name" required /></td></tr> +<input type="text" name="first_name" id="id_first_name" required></td></tr> <tr><th><label for="id_last_name">Last name:</label></th><td> -<input type="text" name="last_name" id="id_last_name" required /></td></tr> +<input type="text" name="last_name" id="id_last_name" required></td></tr> <tr><th><label for="id_birthday">Birthday:</label></th><td> -<input type="text" name="birthday" id="id_birthday" required /></td></tr>""" +<input type="text" name="birthday" id="id_birthday" required></td></tr>""" ) self.assertHTMLEqual( p.as_table(), """<tr><th><label for="id_first_name">First name:</label></th><td> -<input type="text" name="first_name" id="id_first_name" required /></td></tr> +<input type="text" name="first_name" id="id_first_name" required></td></tr> <tr><th><label for="id_last_name">Last name:</label></th><td> -<input type="text" name="last_name" id="id_last_name" required /></td></tr> +<input type="text" name="last_name" id="id_last_name" required></td></tr> <tr><th><label for="id_birthday">Birthday:</label></th><td> -<input type="text" name="birthday" id="id_birthday" required /></td></tr>""" +<input type="text" name="birthday" id="id_birthday" required></td></tr>""" ) self.assertHTMLEqual( p.as_ul(), """<li><label for="id_first_name">First name:</label> -<input type="text" name="first_name" id="id_first_name" required /></li> +<input type="text" name="first_name" id="id_first_name" required></li> <li><label for="id_last_name">Last name:</label> -<input type="text" name="last_name" id="id_last_name" required /></li> +<input type="text" name="last_name" id="id_last_name" required></li> <li><label for="id_birthday">Birthday:</label> -<input type="text" name="birthday" id="id_birthday" required /></li>""" +<input type="text" name="birthday" id="id_birthday" required></li>""" ) self.assertHTMLEqual( p.as_p(), """<p><label for="id_first_name">First name:</label> -<input type="text" name="first_name" id="id_first_name" required /></p> +<input type="text" name="first_name" id="id_first_name" required></p> <p><label for="id_last_name">Last name:</label> -<input type="text" name="last_name" id="id_last_name" required /></p> +<input type="text" name="last_name" id="id_last_name" required></p> <p><label for="id_birthday">Birthday:</label> -<input type="text" name="birthday" id="id_birthday" required /></p>""" +<input type="text" name="birthday" id="id_birthday" required></p>""" ) def test_unicode_values(self): @@ -229,33 +229,33 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( p.as_table(), '<tr><th><label for="id_first_name">First name:</label></th><td>' - '<input type="text" name="first_name" value="John" id="id_first_name" required /></td></tr>\n' + '<input type="text" name="first_name" value="John" id="id_first_name" required></td></tr>\n' '<tr><th><label for="id_last_name">Last name:</label>' '</th><td><input type="text" name="last_name" ' 'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111"' - 'id="id_last_name" required /></td></tr>\n' + 'id="id_last_name" required></td></tr>\n' '<tr><th><label for="id_birthday">Birthday:</label></th><td>' - '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required /></td></tr>' + '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required></td></tr>' ) self.assertHTMLEqual( p.as_ul(), '<li><label for="id_first_name">First name:</label> ' - '<input type="text" name="first_name" value="John" id="id_first_name" required /></li>\n' + '<input type="text" name="first_name" value="John" id="id_first_name" required></li>\n' '<li><label for="id_last_name">Last name:</label> ' '<input type="text" name="last_name" ' - 'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" required /></li>\n' + 'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" required></li>\n' '<li><label for="id_birthday">Birthday:</label> ' - '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required /></li>' + '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required></li>' ) self.assertHTMLEqual( p.as_p(), '<p><label for="id_first_name">First name:</label> ' - '<input type="text" name="first_name" value="John" id="id_first_name" required /></p>\n' + '<input type="text" name="first_name" value="John" id="id_first_name" required></p>\n' '<p><label for="id_last_name">Last name:</label> ' '<input type="text" name="last_name" ' - 'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" required /></p>\n' + 'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" required></p>\n' '<p><label for="id_birthday">Birthday:</label> ' - '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required /></p>' + '<input type="text" name="birthday" value="1940-10-9" id="id_birthday" required></p>' ) p = Person({'last_name': 'Lennon'}) @@ -277,10 +277,10 @@ class FormsTestCase(SimpleTestCase): p = Person() self.assertHTMLEqual( str(p['first_name']), - '<input type="text" name="first_name" id="id_first_name" required />', + '<input type="text" name="first_name" id="id_first_name" required>', ) - self.assertHTMLEqual(str(p['last_name']), '<input type="text" name="last_name" id="id_last_name" required />') - self.assertHTMLEqual(str(p['birthday']), '<input type="text" name="birthday" id="id_birthday" required />') + self.assertHTMLEqual(str(p['last_name']), '<input type="text" name="last_name" id="id_last_name" required>') + self.assertHTMLEqual(str(p['birthday']), '<input type="text" name="birthday" id="id_birthday" required>') def test_cleaned_data_only_fields(self): # cleaned_data will always *only* contain a key for fields defined in the @@ -340,29 +340,29 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( p.as_table(), """<tr><th><label for="first_name_id">First name:</label></th><td> -<input type="text" name="first_name" id="first_name_id" required /></td></tr> +<input type="text" name="first_name" id="first_name_id" required></td></tr> <tr><th><label for="last_name_id">Last name:</label></th><td> -<input type="text" name="last_name" id="last_name_id" required /></td></tr> +<input type="text" name="last_name" id="last_name_id" required></td></tr> <tr><th><label for="birthday_id">Birthday:</label></th><td> -<input type="text" name="birthday" id="birthday_id" required /></td></tr>""" +<input type="text" name="birthday" id="birthday_id" required></td></tr>""" ) self.assertHTMLEqual( p.as_ul(), """<li><label for="first_name_id">First name:</label> -<input type="text" name="first_name" id="first_name_id" required /></li> +<input type="text" name="first_name" id="first_name_id" required></li> <li><label for="last_name_id">Last name:</label> -<input type="text" name="last_name" id="last_name_id" required /></li> +<input type="text" name="last_name" id="last_name_id" required></li> <li><label for="birthday_id">Birthday:</label> -<input type="text" name="birthday" id="birthday_id" required /></li>""" +<input type="text" name="birthday" id="birthday_id" required></li>""" ) self.assertHTMLEqual( p.as_p(), """<p><label for="first_name_id">First name:</label> -<input type="text" name="first_name" id="first_name_id" required /></p> +<input type="text" name="first_name" id="first_name_id" required></p> <p><label for="last_name_id">Last name:</label> -<input type="text" name="last_name" id="last_name_id" required /></p> +<input type="text" name="last_name" id="last_name_id" required></p> <p><label for="birthday_id">Birthday:</label> -<input type="text" name="birthday" id="birthday_id" required /></p>""" +<input type="text" name="birthday" id="birthday_id" required></p>""" ) def test_auto_id_true(self): @@ -372,11 +372,11 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( p.as_ul(), """<li><label for="first_name">First name:</label> -<input type="text" name="first_name" id="first_name" required /></li> +<input type="text" name="first_name" id="first_name" required></li> <li><label for="last_name">Last name:</label> -<input type="text" name="last_name" id="last_name" required /></li> +<input type="text" name="last_name" id="last_name" required></li> <li><label for="birthday">Birthday:</label> -<input type="text" name="birthday" id="birthday" required /></li>""" +<input type="text" name="birthday" id="birthday" required></li>""" ) def test_auto_id_false(self): @@ -385,9 +385,9 @@ class FormsTestCase(SimpleTestCase): p = Person(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>First name: <input type="text" name="first_name" required /></li> -<li>Last name: <input type="text" name="last_name" required /></li> -<li>Birthday: <input type="text" name="birthday" required /></li>""" + """<li>First name: <input type="text" name="first_name" required></li> +<li>Last name: <input type="text" name="last_name" required></li> +<li>Birthday: <input type="text" name="birthday" required></li>""" ) def test_id_on_field(self): @@ -397,9 +397,9 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( p.as_ul(), """<li><label for="first_name_id">First name:</label> -<input type="text" id="first_name_id" name="first_name" required /></li> -<li>Last name: <input type="text" name="last_name" required /></li> -<li>Birthday: <input type="text" name="birthday" required /></li>""" +<input type="text" id="first_name_id" name="first_name" required></li> +<li>Last name: <input type="text" name="last_name" required></li> +<li>Birthday: <input type="text" name="birthday" required></li>""" ) def test_auto_id_on_form_and_field(self): @@ -409,11 +409,11 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( p.as_ul(), """<li><label for="first_name_id">First name:</label> -<input type="text" id="first_name_id" name="first_name" required /></li> +<input type="text" id="first_name_id" name="first_name" required></li> <li><label for="last_name">Last name:</label> -<input type="text" name="last_name" id="last_name" required /></li> +<input type="text" name="last_name" id="last_name" required></li> <li><label for="birthday">Birthday:</label> -<input type="text" name="birthday" id="birthday" required /></li>""" +<input type="text" name="birthday" id="birthday" required></li>""" ) def test_various_boolean_values(self): @@ -422,33 +422,33 @@ class FormsTestCase(SimpleTestCase): get_spam = BooleanField() f = SignupForm(auto_id=False) - self.assertHTMLEqual(str(f['email']), '<input type="email" name="email" required />') - self.assertHTMLEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" required />') + self.assertHTMLEqual(str(f['email']), '<input type="email" name="email" required>') + self.assertHTMLEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" required>') f = SignupForm({'email': 'test@example.com', 'get_spam': True}, auto_id=False) - self.assertHTMLEqual(str(f['email']), '<input type="email" name="email" value="test@example.com" required />') + self.assertHTMLEqual(str(f['email']), '<input type="email" name="email" value="test@example.com" required>') self.assertHTMLEqual( str(f['get_spam']), - '<input checked type="checkbox" name="get_spam" required />', + '<input checked type="checkbox" name="get_spam" required>', ) # 'True' or 'true' should be rendered without a value attribute f = SignupForm({'email': 'test@example.com', 'get_spam': 'True'}, auto_id=False) self.assertHTMLEqual( str(f['get_spam']), - '<input checked type="checkbox" name="get_spam" required />', + '<input checked type="checkbox" name="get_spam" required>', ) f = SignupForm({'email': 'test@example.com', 'get_spam': 'true'}, auto_id=False) self.assertHTMLEqual( - str(f['get_spam']), '<input checked type="checkbox" name="get_spam" required />') + str(f['get_spam']), '<input checked type="checkbox" name="get_spam" required>') # A value of 'False' or 'false' should be rendered unchecked f = SignupForm({'email': 'test@example.com', 'get_spam': 'False'}, auto_id=False) - self.assertHTMLEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" required />') + self.assertHTMLEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" required>') f = SignupForm({'email': 'test@example.com', 'get_spam': 'false'}, auto_id=False) - self.assertHTMLEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" required />') + self.assertHTMLEqual(str(f['get_spam']), '<input type="checkbox" name="get_spam" required>') # A value of '0' should be interpreted as a True value (#16820) f = SignupForm({'email': 'test@example.com', 'get_spam': '0'}) @@ -462,7 +462,7 @@ class FormsTestCase(SimpleTestCase): message = CharField(widget=Textarea) f = ContactForm(auto_id=False) - self.assertHTMLEqual(str(f['subject']), '<input type="text" name="subject" required />') + self.assertHTMLEqual(str(f['subject']), '<input type="text" name="subject" required>') self.assertHTMLEqual(str(f['message']), '<textarea name="message" rows="10" cols="40" required></textarea>') # as_textarea(), as_text() and as_hidden() are shortcuts for changing the output @@ -471,8 +471,8 @@ class FormsTestCase(SimpleTestCase): f['subject'].as_textarea(), '<textarea name="subject" rows="10" cols="40" required></textarea>', ) - self.assertHTMLEqual(f['message'].as_text(), '<input type="text" name="message" required />') - self.assertHTMLEqual(f['message'].as_hidden(), '<input type="hidden" name="message" />') + self.assertHTMLEqual(f['message'].as_text(), '<input type="text" name="message" required>') + self.assertHTMLEqual(f['message'].as_hidden(), '<input type="hidden" name="message">') # The 'widget' parameter to a Field can also be an instance: class ContactForm(Form): @@ -484,7 +484,7 @@ class FormsTestCase(SimpleTestCase): # Instance-level attrs are *not* carried over to as_textarea(), as_text() and # as_hidden(): - self.assertHTMLEqual(f['message'].as_text(), '<input type="text" name="message" required />') + self.assertHTMLEqual(f['message'].as_text(), '<input type="text" name="message" required>') f = ContactForm({'subject': 'Hello', 'message': 'I love you.'}, auto_id=False) self.assertHTMLEqual( f['subject'].as_textarea(), @@ -492,9 +492,9 @@ class FormsTestCase(SimpleTestCase): ) self.assertHTMLEqual( f['message'].as_text(), - '<input type="text" name="message" value="I love you." required />', + '<input type="text" name="message" value="I love you." required>', ) - self.assertHTMLEqual(f['message'].as_hidden(), '<input type="hidden" name="message" value="I love you." />') + self.assertHTMLEqual(f['message'].as_hidden(), '<input type="hidden" name="message" value="I love you.">') def test_forms_with_choices(self): # For a form with a <select>, use ChoiceField: @@ -585,18 +585,18 @@ class FormsTestCase(SimpleTestCase): f = FrameworkForm(auto_id=False) self.assertHTMLEqual(str(f['language']), """<ul> -<li><label><input type="radio" name="language" value="P" required /> Python</label></li> -<li><label><input type="radio" name="language" value="J" required /> Java</label></li> +<li><label><input type="radio" name="language" value="P" required> Python</label></li> +<li><label><input type="radio" name="language" value="J" required> Java</label></li> </ul>""") - self.assertHTMLEqual(f.as_table(), """<tr><th>Name:</th><td><input type="text" name="name" required /></td></tr> + self.assertHTMLEqual(f.as_table(), """<tr><th>Name:</th><td><input type="text" name="name" required></td></tr> <tr><th>Language:</th><td><ul> -<li><label><input type="radio" name="language" value="P" required /> Python</label></li> -<li><label><input type="radio" name="language" value="J" required /> Java</label></li> +<li><label><input type="radio" name="language" value="P" required> Python</label></li> +<li><label><input type="radio" name="language" value="J" required> Java</label></li> </ul></td></tr>""") - self.assertHTMLEqual(f.as_ul(), """<li>Name: <input type="text" name="name" required /></li> + self.assertHTMLEqual(f.as_ul(), """<li>Name: <input type="text" name="name" required></li> <li>Language: <ul> -<li><label><input type="radio" name="language" value="P" required /> Python</label></li> -<li><label><input type="radio" name="language" value="J" required /> Java</label></li> +<li><label><input type="radio" name="language" value="P" required> Python</label></li> +<li><label><input type="radio" name="language" value="J" required> Java</label></li> </ul></li>""") # Regarding auto_id and <label>, RadioSelect is a special case. Each radio button @@ -606,9 +606,9 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual( str(f['language']), """<ul id="id_language"> -<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" required /> +<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" required> Python</label></li> -<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" required /> +<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" required> Java</label></li> </ul>""" ) @@ -618,31 +618,31 @@ Java</label></li> # ID of the *first* radio button. self.assertHTMLEqual( f.as_table(), - """<tr><th><label for="id_name">Name:</label></th><td><input type="text" name="name" id="id_name" required /></td></tr> + """<tr><th><label for="id_name">Name:</label></th><td><input type="text" name="name" id="id_name" required></td></tr> <tr><th><label for="id_language_0">Language:</label></th><td><ul id="id_language"> -<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" required /> +<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" required> Python</label></li> -<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" required /> +<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" required> Java</label></li> </ul></td></tr>""" ) self.assertHTMLEqual( f.as_ul(), - """<li><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" required /></li> + """<li><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" required></li> <li><label for="id_language_0">Language:</label> <ul id="id_language"> -<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" required /> +<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" required> Python</label></li> -<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" required /> +<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" required> Java</label></li> </ul></li>""" ) self.assertHTMLEqual( f.as_p(), - """<p><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" required /></p> + """<p><label for="id_name">Name:</label> <input type="text" name="name" id="id_name" required></p> <p><label for="id_language_0">Language:</label> <ul id="id_language"> -<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" required /> +<li><label for="id_language_0"><input type="radio" id="id_language_0" value="P" name="language" required> Python</label></li> -<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" required /> +<li><label for="id_language_1"><input type="radio" id="id_language_1" value="J" name="language" required> Java</label></li> </ul></p>""" ) @@ -652,9 +652,9 @@ Java</label></li> self.assertHTMLEqual( t.render(Context({'form': f})), """<div class="myradio"><label for="id_language_0"> -<input id="id_language_0" name="language" type="radio" value="P" required /> Python</label></div> +<input id="id_language_0" name="language" type="radio" value="P" required> Python</label></div> <div class="myradio"><label for="id_language_1"> -<input id="id_language_1" name="language" type="radio" value="J" required /> Java</label></div>""" +<input id="id_language_1" name="language" type="radio" value="J" required> Java</label></div>""" ) def test_form_with_iterable_boundfield(self): @@ -667,17 +667,17 @@ Java</label></li> f = BeatleForm(auto_id=False) self.assertHTMLEqual( '\n'.join(str(bf) for bf in f['name']), - """<label><input type="radio" name="name" value="john" required /> John</label> -<label><input type="radio" name="name" value="paul" required /> Paul</label> -<label><input type="radio" name="name" value="george" required /> George</label> -<label><input type="radio" name="name" value="ringo" required /> Ringo</label>""" + """<label><input type="radio" name="name" value="john" required> John</label> +<label><input type="radio" name="name" value="paul" required> Paul</label> +<label><input type="radio" name="name" value="george" required> George</label> +<label><input type="radio" name="name" value="ringo" required> Ringo</label>""" ) self.assertHTMLEqual( '\n'.join('<div>%s</div>' % bf for bf in f['name']), - """<div><label><input type="radio" name="name" value="john" required /> John</label></div> -<div><label><input type="radio" name="name" value="paul" required /> Paul</label></div> -<div><label><input type="radio" name="name" value="george" required /> George</label></div> -<div><label><input type="radio" name="name" value="ringo" required /> Ringo</label></div>""" + """<div><label><input type="radio" name="name" value="john" required> John</label></div> +<div><label><input type="radio" name="name" value="paul" required> Paul</label></div> +<div><label><input type="radio" name="name" value="george" required> George</label></div> +<div><label><input type="radio" name="name" value="ringo" required> Ringo</label></div>""" ) def test_form_with_iterable_boundfield_id(self): @@ -693,24 +693,24 @@ Java</label></li> self.assertEqual(fields[0].choice_label, 'John') self.assertHTMLEqual( fields[0].tag(), - '<input type="radio" name="name" value="john" id="id_name_0" required />' + '<input type="radio" name="name" value="john" id="id_name_0" required>' ) self.assertHTMLEqual( str(fields[0]), '<label for="id_name_0"><input type="radio" name="name" ' - 'value="john" id="id_name_0" required /> John</label>' + 'value="john" id="id_name_0" required> John</label>' ) self.assertEqual(fields[1].id_for_label, 'id_name_1') self.assertEqual(fields[1].choice_label, 'Paul') self.assertHTMLEqual( fields[1].tag(), - '<input type="radio" name="name" value="paul" id="id_name_1" required />' + '<input type="radio" name="name" value="paul" id="id_name_1" required>' ) self.assertHTMLEqual( str(fields[1]), '<label for="id_name_1"><input type="radio" name="name" ' - 'value="paul" id="id_name_1" required /> Paul</label>' + 'value="paul" id="id_name_1" required> Paul</label>' ) def test_iterable_boundfield_select(self): @@ -730,7 +730,7 @@ Java</label></li> name = CharField() f = BeatleForm(auto_id=False) - self.assertHTMLEqual('\n'.join(str(bf) for bf in f['name']), '<input type="text" name="name" required />') + self.assertHTMLEqual('\n'.join(str(bf) for bf in f['name']), '<input type="text" name="name" required>') def test_boundfield_slice(self): class BeatleForm(Form): @@ -773,7 +773,7 @@ Java</label></li> <option value="P">Paul McCartney</option> </select>""") f = SongForm({'name': 'Yesterday', 'composers': ['P']}, auto_id=False) - self.assertHTMLEqual(str(f['name']), '<input type="text" name="name" value="Yesterday" required />') + self.assertHTMLEqual(str(f['name']), '<input type="text" name="name" value="Yesterday" required>') self.assertHTMLEqual(str(f['composers']), """<select multiple name="composers" required> <option value="J">John Lennon</option> <option value="P" selected>Paul McCartney</option> @@ -827,10 +827,10 @@ Java</label></li> # have multiple values, its as_hidden() renders multiple <input type="hidden"> # tags. f = SongForm({'name': 'Yesterday', 'composers': ['P']}, auto_id=False) - self.assertHTMLEqual(f['composers'].as_hidden(), '<input type="hidden" name="composers" value="P" />') + self.assertHTMLEqual(f['composers'].as_hidden(), '<input type="hidden" name="composers" value="P">') f = SongForm({'name': 'From Me To You', 'composers': ['P', 'J']}, auto_id=False) - self.assertHTMLEqual(f['composers'].as_hidden(), """<input type="hidden" name="composers" value="P" /> -<input type="hidden" name="composers" value="J" />""") + self.assertHTMLEqual(f['composers'].as_hidden(), """<input type="hidden" name="composers" value="P"> +<input type="hidden" name="composers" value="J">""") # DateTimeField rendered as_hidden() is special too class MessageForm(Form): @@ -840,13 +840,13 @@ Java</label></li> self.assertTrue(f.is_valid()) self.assertHTMLEqual( str(f['when']), - '<input type="text" name="when_0" value="1992-01-01" id="id_when_0" required />' - '<input type="text" name="when_1" value="01:01" id="id_when_1" required />' + '<input type="text" name="when_0" value="1992-01-01" id="id_when_0" required>' + '<input type="text" name="when_1" value="01:01" id="id_when_1" required>' ) self.assertHTMLEqual( f['when'].as_hidden(), - '<input type="hidden" name="when_0" value="1992-01-01" id="id_when_0" />' - '<input type="hidden" name="when_1" value="01:01" id="id_when_1" />' + '<input type="hidden" name="when_0" value="1992-01-01" id="id_when_0">' + '<input type="hidden" name="when_1" value="01:01" id="id_when_1">' ) def test_multiple_choice_checkbox(self): @@ -860,25 +860,25 @@ Java</label></li> f = SongForm(auto_id=False) self.assertHTMLEqual(str(f['composers']), """<ul> -<li><label><input type="checkbox" name="composers" value="J" /> John Lennon</label></li> -<li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li> +<li><label><input type="checkbox" name="composers" value="J"> John Lennon</label></li> +<li><label><input type="checkbox" name="composers" value="P"> Paul McCartney</label></li> </ul>""") f = SongForm({'composers': ['J']}, auto_id=False) self.assertHTMLEqual(str(f['composers']), """<ul> -<li><label><input checked type="checkbox" name="composers" value="J" /> John Lennon</label></li> -<li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li> +<li><label><input checked type="checkbox" name="composers" value="J"> John Lennon</label></li> +<li><label><input type="checkbox" name="composers" value="P"> Paul McCartney</label></li> </ul>""") f = SongForm({'composers': ['J', 'P']}, auto_id=False) self.assertHTMLEqual(str(f['composers']), """<ul> -<li><label><input checked type="checkbox" name="composers" value="J" /> John Lennon</label></li> -<li><label><input checked type="checkbox" name="composers" value="P" /> Paul McCartney</label></li> +<li><label><input checked type="checkbox" name="composers" value="J"> John Lennon</label></li> +<li><label><input checked type="checkbox" name="composers" value="P"> Paul McCartney</label></li> </ul>""") # Test iterating on individual checkboxes in a template t = Template('{% for checkbox in form.composers %}<div class="mycheckbox">{{ checkbox }}</div>{% endfor %}') self.assertHTMLEqual(t.render(Context({'form': f})), """<div class="mycheckbox"><label> -<input checked name="composers" type="checkbox" value="J" /> John Lennon</label></div> +<input checked name="composers" type="checkbox" value="J"> John Lennon</label></div> <div class="mycheckbox"><label> -<input checked name="composers" type="checkbox" value="P" /> Paul McCartney</label></div>""") +<input checked name="composers" type="checkbox" value="P"> Paul McCartney</label></div>""") def test_checkbox_auto_id(self): # Regarding auto_id, CheckboxSelectMultiple is a special case. Each checkbox @@ -896,9 +896,9 @@ Java</label></li> str(f['composers']), """<ul id="composers_id"> <li><label for="composers_id_0"> -<input type="checkbox" name="composers" value="J" id="composers_id_0" /> John Lennon</label></li> +<input type="checkbox" name="composers" value="J" id="composers_id_0"> John Lennon</label></li> <li><label for="composers_id_1"> -<input type="checkbox" name="composers" value="P" id="composers_id_1" /> Paul McCartney</label></li> +<input type="checkbox" name="composers" value="P" id="composers_id_1"> Paul McCartney</label></li> </ul>""" ) @@ -949,9 +949,9 @@ Java</label></li> f = SongFormHidden(MultiValueDict({'name': ['Yesterday'], 'composers': ['J', 'P']}), auto_id=False) self.assertHTMLEqual( f.as_ul(), - """<li>Name: <input type="text" name="name" value="Yesterday" required /> -<input type="hidden" name="composers" value="J" /> -<input type="hidden" name="composers" value="P" /></li>""" + """<li>Name: <input type="text" name="name" value="Yesterday" required> +<input type="hidden" name="composers" value="J"> +<input type="hidden" name="composers" value="P"></li>""" ) # When using CheckboxSelectMultiple, the framework expects a list of input and @@ -996,10 +996,10 @@ Java</label></li> f.as_table(), """<tr><th><em>Special</em> Field:</th><td> <ul class="errorlist"><li>Something's wrong with 'Nothing to escape'</li></ul> -<input type="text" name="special_name" value="Nothing to escape" required /></td></tr> +<input type="text" name="special_name" value="Nothing to escape" required></td></tr> <tr><th><em>Special</em> Field:</th><td> <ul class="errorlist"><li>'<b>Nothing to escape</b>' is a safe string</li></ul> -<input type="text" name="special_safe_name" value="Nothing to escape" required /></td></tr>""" +<input type="text" name="special_safe_name" value="Nothing to escape" required></td></tr>""" ) f = EscapingForm({ 'special_name': "Should escape < & > and <script>alert('xss')</script>", @@ -1011,10 +1011,10 @@ Java</label></li> <ul class="errorlist"><li>Something's wrong with 'Should escape < & > and <script>alert('xss')</script>'</li></ul> <input type="text" name="special_name" -value="Should escape < & > and <script>alert('xss')</script>" required /></td></tr> +value="Should escape < & > and <script>alert('xss')</script>" required></td></tr> <tr><th><em>Special</em> Field:</th><td> <ul class="errorlist"><li>'<b><i>Do not escape</i></b>' is a safe string</li></ul> -<input type="text" name="special_safe_name" value="<i>Do not escape</i>" required /></td></tr>""" +<input type="text" name="special_safe_name" value="<i>Do not escape</i>" required></td></tr>""" ) def test_validating_multiple_fields(self): @@ -1101,11 +1101,11 @@ value="Should escape < & > and <script>alert('xss')</ f.as_table(), """<tr><th>Username:</th><td> <ul class="errorlist"><li>This field is required.</li></ul> -<input type="text" name="username" maxlength="10" required /></td></tr> +<input type="text" name="username" maxlength="10" required></td></tr> <tr><th>Password1:</th><td><ul class="errorlist"><li>This field is required.</li></ul> -<input type="password" name="password1" required /></td></tr> +<input type="password" name="password1" required></td></tr> <tr><th>Password2:</th><td><ul class="errorlist"><li>This field is required.</li></ul> -<input type="password" name="password2" required /></td></tr>""" +<input type="password" name="password2" required></td></tr>""" ) self.assertEqual(f.errors['username'], ['This field is required.']) self.assertEqual(f.errors['password1'], ['This field is required.']) @@ -1117,17 +1117,17 @@ value="Should escape < & > and <script>alert('xss')</ f.as_table(), """<tr><td colspan="2"> <ul class="errorlist nonfield"><li>Please make sure your passwords match.</li></ul></td></tr> -<tr><th>Username:</th><td><input type="text" name="username" value="adrian" maxlength="10" required /></td></tr> -<tr><th>Password1:</th><td><input type="password" name="password1" required /></td></tr> -<tr><th>Password2:</th><td><input type="password" name="password2" required /></td></tr>""" +<tr><th>Username:</th><td><input type="text" name="username" value="adrian" maxlength="10" required></td></tr> +<tr><th>Password1:</th><td><input type="password" name="password1" required></td></tr> +<tr><th>Password2:</th><td><input type="password" name="password2" required></td></tr>""" ) self.assertHTMLEqual( f.as_ul(), """<li><ul class="errorlist nonfield"> <li>Please make sure your passwords match.</li></ul></li> -<li>Username: <input type="text" name="username" value="adrian" maxlength="10" required /></li> -<li>Password1: <input type="password" name="password1" required /></li> -<li>Password2: <input type="password" name="password2" required /></li>""" +<li>Username: <input type="text" name="username" value="adrian" maxlength="10" required></li> +<li>Password1: <input type="password" name="password1" required></li> +<li>Password2: <input type="password" name="password2" required></li>""" ) f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}, auto_id=False) @@ -1251,9 +1251,9 @@ value="Should escape < & > and <script>alert('xss')</ p = Person(auto_id=False) self.assertHTMLEqual( p.as_table(), - """<tr><th>First name:</th><td><input type="text" name="first_name" required /></td></tr> -<tr><th>Last name:</th><td><input type="text" name="last_name" required /></td></tr> -<tr><th>Birthday:</th><td><input type="text" name="birthday" required /></td></tr>""" + """<tr><th>First name:</th><td><input type="text" name="first_name" required></td></tr> +<tr><th>Last name:</th><td><input type="text" name="last_name" required></td></tr> +<tr><th>Birthday:</th><td><input type="text" name="birthday" required></td></tr>""" ) # Instances of a dynamic Form do not persist fields from one Form instance to @@ -1269,15 +1269,15 @@ value="Should escape < & > and <script>alert('xss')</ my_form = MyForm(field_list=field_list) self.assertHTMLEqual( my_form.as_table(), - """<tr><th>Field1:</th><td><input type="text" name="field1" required /></td></tr> -<tr><th>Field2:</th><td><input type="text" name="field2" required /></td></tr>""" + """<tr><th>Field1:</th><td><input type="text" name="field1" required></td></tr> +<tr><th>Field2:</th><td><input type="text" name="field2" required></td></tr>""" ) field_list = [('field3', CharField()), ('field4', CharField())] my_form = MyForm(field_list=field_list) self.assertHTMLEqual( my_form.as_table(), - """<tr><th>Field3:</th><td><input type="text" name="field3" required /></td></tr> -<tr><th>Field4:</th><td><input type="text" name="field4" required /></td></tr>""" + """<tr><th>Field3:</th><td><input type="text" name="field3" required></td></tr> +<tr><th>Field4:</th><td><input type="text" name="field4" required></td></tr>""" ) class MyForm(Form): @@ -1294,19 +1294,19 @@ value="Should escape < & > and <script>alert('xss')</ my_form = MyForm(field_list=field_list) self.assertHTMLEqual( my_form.as_table(), - """<tr><th>Default field 1:</th><td><input type="text" name="default_field_1" required /></td></tr> -<tr><th>Default field 2:</th><td><input type="text" name="default_field_2" required /></td></tr> -<tr><th>Field1:</th><td><input type="text" name="field1" required /></td></tr> -<tr><th>Field2:</th><td><input type="text" name="field2" required /></td></tr>""" + """<tr><th>Default field 1:</th><td><input type="text" name="default_field_1" required></td></tr> +<tr><th>Default field 2:</th><td><input type="text" name="default_field_2" required></td></tr> +<tr><th>Field1:</th><td><input type="text" name="field1" required></td></tr> +<tr><th>Field2:</th><td><input type="text" name="field2" required></td></tr>""" ) field_list = [('field3', CharField()), ('field4', CharField())] my_form = MyForm(field_list=field_list) self.assertHTMLEqual( my_form.as_table(), - """<tr><th>Default field 1:</th><td><input type="text" name="default_field_1" required /></td></tr> -<tr><th>Default field 2:</th><td><input type="text" name="default_field_2" required /></td></tr> -<tr><th>Field3:</th><td><input type="text" name="field3" required /></td></tr> -<tr><th>Field4:</th><td><input type="text" name="field4" required /></td></tr>""" + """<tr><th>Default field 1:</th><td><input type="text" name="default_field_1" required></td></tr> +<tr><th>Default field 2:</th><td><input type="text" name="default_field_2" required></td></tr> +<tr><th>Field3:</th><td><input type="text" name="field3" required></td></tr> +<tr><th>Field4:</th><td><input type="text" name="field4" required></td></tr>""" ) # Similarly, changes to field attributes do not persist from one Form instance @@ -1404,21 +1404,21 @@ value="Should escape < & > and <script>alert('xss')</ p = Person(auto_id=False) self.assertHTMLEqual( p.as_table(), - """<tr><th>First name:</th><td><input type="text" name="first_name" required /></td></tr> -<tr><th>Last name:</th><td><input type="text" name="last_name" required /></td></tr> + """<tr><th>First name:</th><td><input type="text" name="first_name" required></td></tr> +<tr><th>Last name:</th><td><input type="text" name="last_name" required></td></tr> <tr><th>Birthday:</th> -<td><input type="text" name="birthday" required /><input type="hidden" name="hidden_text" /></td></tr>""" +<td><input type="text" name="birthday" required><input type="hidden" name="hidden_text"></td></tr>""" ) self.assertHTMLEqual( p.as_ul(), - """<li>First name: <input type="text" name="first_name" required /></li> -<li>Last name: <input type="text" name="last_name" required /></li> -<li>Birthday: <input type="text" name="birthday" required /><input type="hidden" name="hidden_text" /></li>""" + """<li>First name: <input type="text" name="first_name" required></li> +<li>Last name: <input type="text" name="last_name" required></li> +<li>Birthday: <input type="text" name="birthday" required><input type="hidden" name="hidden_text"></li>""" ) self.assertHTMLEqual( - p.as_p(), """<p>First name: <input type="text" name="first_name" required /></p> -<p>Last name: <input type="text" name="last_name" required /></p> -<p>Birthday: <input type="text" name="birthday" required /><input type="hidden" name="hidden_text" /></p>""" + p.as_p(), """<p>First name: <input type="text" name="first_name" required></p> +<p>Last name: <input type="text" name="last_name" required></p> +<p>Birthday: <input type="text" name="birthday" required><input type="hidden" name="hidden_text"></p>""" ) # With auto_id set, a HiddenInput still gets an ID, but it doesn't get a label. @@ -1426,32 +1426,32 @@ value="Should escape < & > and <script>alert('xss')</ self.assertHTMLEqual( p.as_table(), """<tr><th><label for="id_first_name">First name:</label></th><td> -<input type="text" name="first_name" id="id_first_name" required /></td></tr> +<input type="text" name="first_name" id="id_first_name" required></td></tr> <tr><th><label for="id_last_name">Last name:</label></th><td> -<input type="text" name="last_name" id="id_last_name" required /></td></tr> +<input type="text" name="last_name" id="id_last_name" required></td></tr> <tr><th><label for="id_birthday">Birthday:</label></th><td> -<input type="text" name="birthday" id="id_birthday" required /> -<input type="hidden" name="hidden_text" id="id_hidden_text" /></td></tr>""" +<input type="text" name="birthday" id="id_birthday" required> +<input type="hidden" name="hidden_text" id="id_hidden_text"></td></tr>""" ) self.assertHTMLEqual( p.as_ul(), """<li><label for="id_first_name">First name:</label> -<input type="text" name="first_name" id="id_first_name" required /></li> +<input type="text" name="first_name" id="id_first_name" required></li> <li><label for="id_last_name">Last name:</label> -<input type="text" name="last_name" id="id_last_name" required /></li> +<input type="text" name="last_name" id="id_last_name" required></li> <li><label for="id_birthday">Birthday:</label> -<input type="text" name="birthday" id="id_birthday" required /> -<input type="hidden" name="hidden_text" id="id_hidden_text" /></li>""" +<input type="text" name="birthday" id="id_birthday" required> +<input type="hidden" name="hidden_text" id="id_hidden_text"></li>""" ) self.assertHTMLEqual( p.as_p(), """<p><label for="id_first_name">First name:</label> -<input type="text" name="first_name" id="id_first_name" required /></p> +<input type="text" name="first_name" id="id_first_name" required></p> <p><label for="id_last_name">Last name:</label> -<input type="text" name="last_name" id="id_last_name" required /></p> +<input type="text" name="last_name" id="id_last_name" required></p> <p><label for="id_birthday">Birthday:</label> -<input type="text" name="birthday" id="id_birthday" required /> -<input type="hidden" name="hidden_text" id="id_hidden_text" /></p>""" +<input type="text" name="birthday" id="id_birthday" required> +<input type="hidden" name="hidden_text" id="id_hidden_text"></p>""" ) # If a field with a HiddenInput has errors, the as_table() and as_ul() output @@ -1463,26 +1463,26 @@ value="Should escape < & > and <script>alert('xss')</ p.as_table(), """<tr><td colspan="2"> <ul class="errorlist nonfield"><li>(Hidden field hidden_text) This field is required.</li></ul></td></tr> -<tr><th>First name:</th><td><input type="text" name="first_name" value="John" required /></td></tr> -<tr><th>Last name:</th><td><input type="text" name="last_name" value="Lennon" required /></td></tr> -<tr><th>Birthday:</th><td><input type="text" name="birthday" value="1940-10-9" required /> -<input type="hidden" name="hidden_text" /></td></tr>""" +<tr><th>First name:</th><td><input type="text" name="first_name" value="John" required></td></tr> +<tr><th>Last name:</th><td><input type="text" name="last_name" value="Lennon" required></td></tr> +<tr><th>Birthday:</th><td><input type="text" name="birthday" value="1940-10-9" required> +<input type="hidden" name="hidden_text"></td></tr>""" ) self.assertHTMLEqual( p.as_ul(), """<li><ul class="errorlist nonfield"><li>(Hidden field hidden_text) This field is required.</li></ul></li> -<li>First name: <input type="text" name="first_name" value="John" required /></li> -<li>Last name: <input type="text" name="last_name" value="Lennon" required /></li> -<li>Birthday: <input type="text" name="birthday" value="1940-10-9" required /> -<input type="hidden" name="hidden_text" /></li>""" +<li>First name: <input type="text" name="first_name" value="John" required></li> +<li>Last name: <input type="text" name="last_name" value="Lennon" required></li> +<li>Birthday: <input type="text" name="birthday" value="1940-10-9" required> +<input type="hidden" name="hidden_text"></li>""" ) self.assertHTMLEqual( p.as_p(), """<ul class="errorlist nonfield"><li>(Hidden field hidden_text) This field is required.</li></ul> -<p>First name: <input type="text" name="first_name" value="John" required /></p> -<p>Last name: <input type="text" name="last_name" value="Lennon" required /></p> -<p>Birthday: <input type="text" name="birthday" value="1940-10-9" required /> -<input type="hidden" name="hidden_text" /></p>""" +<p>First name: <input type="text" name="first_name" value="John" required></p> +<p>Last name: <input type="text" name="last_name" value="Lennon" required></p> +<p>Birthday: <input type="text" name="birthday" value="1940-10-9" required> +<input type="hidden" name="hidden_text"></p>""" ) # A corner case: It's possible for a form to have only HiddenInputs. @@ -1491,9 +1491,9 @@ value="Should escape < & > and <script>alert('xss')</ bar = CharField(widget=HiddenInput) p = TestForm(auto_id=False) - self.assertHTMLEqual(p.as_table(), '<input type="hidden" name="foo" /><input type="hidden" name="bar" />') - self.assertHTMLEqual(p.as_ul(), '<input type="hidden" name="foo" /><input type="hidden" name="bar" />') - self.assertHTMLEqual(p.as_p(), '<input type="hidden" name="foo" /><input type="hidden" name="bar" />') + self.assertHTMLEqual(p.as_table(), '<input type="hidden" name="foo"><input type="hidden" name="bar">') + self.assertHTMLEqual(p.as_ul(), '<input type="hidden" name="foo"><input type="hidden" name="bar">') + self.assertHTMLEqual(p.as_p(), '<input type="hidden" name="foo"><input type="hidden" name="bar">') def test_field_order(self): # A Form's fields are displayed in the same order in which they were defined. @@ -1514,20 +1514,20 @@ value="Should escape < & > and <script>alert('xss')</ field14 = CharField() p = TestForm(auto_id=False) - self.assertHTMLEqual(p.as_table(), """<tr><th>Field1:</th><td><input type="text" name="field1" required /></td></tr> -<tr><th>Field2:</th><td><input type="text" name="field2" required /></td></tr> -<tr><th>Field3:</th><td><input type="text" name="field3" required /></td></tr> -<tr><th>Field4:</th><td><input type="text" name="field4" required /></td></tr> -<tr><th>Field5:</th><td><input type="text" name="field5" required /></td></tr> -<tr><th>Field6:</th><td><input type="text" name="field6" required /></td></tr> -<tr><th>Field7:</th><td><input type="text" name="field7" required /></td></tr> -<tr><th>Field8:</th><td><input type="text" name="field8" required /></td></tr> -<tr><th>Field9:</th><td><input type="text" name="field9" required /></td></tr> -<tr><th>Field10:</th><td><input type="text" name="field10" required /></td></tr> -<tr><th>Field11:</th><td><input type="text" name="field11" required /></td></tr> -<tr><th>Field12:</th><td><input type="text" name="field12" required /></td></tr> -<tr><th>Field13:</th><td><input type="text" name="field13" required /></td></tr> -<tr><th>Field14:</th><td><input type="text" name="field14" required /></td></tr>""") + self.assertHTMLEqual(p.as_table(), """<tr><th>Field1:</th><td><input type="text" name="field1" required></td></tr> +<tr><th>Field2:</th><td><input type="text" name="field2" required></td></tr> +<tr><th>Field3:</th><td><input type="text" name="field3" required></td></tr> +<tr><th>Field4:</th><td><input type="text" name="field4" required></td></tr> +<tr><th>Field5:</th><td><input type="text" name="field5" required></td></tr> +<tr><th>Field6:</th><td><input type="text" name="field6" required></td></tr> +<tr><th>Field7:</th><td><input type="text" name="field7" required></td></tr> +<tr><th>Field8:</th><td><input type="text" name="field8" required></td></tr> +<tr><th>Field9:</th><td><input type="text" name="field9" required></td></tr> +<tr><th>Field10:</th><td><input type="text" name="field10" required></td></tr> +<tr><th>Field11:</th><td><input type="text" name="field11" required></td></tr> +<tr><th>Field12:</th><td><input type="text" name="field12" required></td></tr> +<tr><th>Field13:</th><td><input type="text" name="field13" required></td></tr> +<tr><th>Field14:</th><td><input type="text" name="field14" required></td></tr>""") def test_explicit_field_order(self): class TestFormParent(Form): @@ -1586,10 +1586,10 @@ value="Should escape < & > and <script>alert('xss')</ p = UserRegistration(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" maxlength="10" required /></li> -<li>Realname: <input type="text" name="realname" maxlength="10" required /></li> -<li>Address: <input type="text" name="address" required /></li>""" + """<li>Username: <input type="text" name="username" maxlength="10" required></li> +<li>Password: <input type="password" name="password" maxlength="10" required></li> +<li>Realname: <input type="text" name="realname" maxlength="10" required></li> +<li>Address: <input type="text" name="address" required></li>""" ) # If you specify a custom "attrs" that includes the "maxlength" attribute, @@ -1602,8 +1602,8 @@ value="Should escape < & > and <script>alert('xss')</ p = UserRegistration(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" maxlength="10" required /></li>""" + """<li>Username: <input type="text" name="username" maxlength="10" required></li> +<li>Password: <input type="password" name="password" maxlength="10" required></li>""" ) def test_specifying_labels(self): @@ -1618,9 +1618,9 @@ value="Should escape < & > and <script>alert('xss')</ p = UserRegistration(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Your username: <input type="text" name="username" maxlength="10" required /></li> -<li>Password1: <input type="password" name="password1" required /></li> -<li>Contraseña (de nuevo): <input type="password" name="password2" required /></li>""" + """<li>Your username: <input type="text" name="username" maxlength="10" required></li> +<li>Password1: <input type="password" name="password1" required></li> +<li>Contraseña (de nuevo): <input type="password" name="password2" required></li>""" ) # Labels for as_* methods will only end in a colon if they don't end in other @@ -1634,19 +1634,19 @@ value="Should escape < & > and <script>alert('xss')</ self.assertHTMLEqual( Questions(auto_id=False).as_p(), - """<p>The first question: <input type="text" name="q1" required /></p> -<p>What is your name? <input type="text" name="q2" required /></p> -<p>The answer to life is: <input type="text" name="q3" required /></p> -<p>Answer this question! <input type="text" name="q4" required /></p> -<p>The last question. Period. <input type="text" name="q5" required /></p>""" + """<p>The first question: <input type="text" name="q1" required></p> +<p>What is your name? <input type="text" name="q2" required></p> +<p>The answer to life is: <input type="text" name="q3" required></p> +<p>Answer this question! <input type="text" name="q4" required></p> +<p>The last question. Period. <input type="text" name="q5" required></p>""" ) self.assertHTMLEqual( Questions().as_p(), - """<p><label for="id_q1">The first question:</label> <input type="text" name="q1" id="id_q1" required /></p> -<p><label for="id_q2">What is your name?</label> <input type="text" name="q2" id="id_q2" required /></p> -<p><label for="id_q3">The answer to life is:</label> <input type="text" name="q3" id="id_q3" required /></p> -<p><label for="id_q4">Answer this question!</label> <input type="text" name="q4" id="id_q4" required /></p> -<p><label for="id_q5">The last question. Period.</label> <input type="text" name="q5" id="id_q5" required /></p>""" + """<p><label for="id_q1">The first question:</label> <input type="text" name="q1" id="id_q1" required></p> +<p><label for="id_q2">What is your name?</label> <input type="text" name="q2" id="id_q2" required></p> +<p><label for="id_q3">The answer to life is:</label> <input type="text" name="q3" id="id_q3" required></p> +<p><label for="id_q4">Answer this question!</label> <input type="text" name="q4" id="id_q4" required></p> +<p><label for="id_q5">The last question. Period.</label> <input type="text" name="q5" id="id_q5" required></p>""" ) # If a label is set to the empty string for a field, that field won't get a label. @@ -1655,14 +1655,14 @@ value="Should escape < & > and <script>alert('xss')</ password = CharField(widget=PasswordInput) p = UserRegistration(auto_id=False) - self.assertHTMLEqual(p.as_ul(), """<li> <input type="text" name="username" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li>""") + self.assertHTMLEqual(p.as_ul(), """<li> <input type="text" name="username" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li>""") p = UserRegistration(auto_id='id_%s') self.assertHTMLEqual( p.as_ul(), - """<li> <input id="id_username" type="text" name="username" maxlength="10" required /></li> + """<li> <input id="id_username" type="text" name="username" maxlength="10" required></li> <li><label for="id_password">Password:</label> -<input type="password" name="password" id="id_password" required /></li>""" +<input type="password" name="password" id="id_password" required></li>""" ) # If label is None, Django will auto-create the label from the field name. This @@ -1674,16 +1674,16 @@ value="Should escape < & > and <script>alert('xss')</ p = UserRegistration(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li>""" + """<li>Username: <input type="text" name="username" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li>""" ) p = UserRegistration(auto_id='id_%s') self.assertHTMLEqual( p.as_ul(), """<li><label for="id_username">Username:</label> -<input id="id_username" type="text" name="username" maxlength="10" required /></li> +<input id="id_username" type="text" name="username" maxlength="10" required></li> <li><label for="id_password">Password:</label> -<input type="password" name="password" id="id_password" required /></li>""" +<input type="password" name="password" id="id_password" required></li>""" ) def test_label_suffix(self): @@ -1698,26 +1698,26 @@ value="Should escape < & > and <script>alert('xss')</ answer = CharField(label='Secret answer', label_suffix=' =') f = FavoriteForm(auto_id=False) - self.assertHTMLEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" required /></li> -<li>Favorite animal: <input type="text" name="animal" required /></li> -<li>Secret answer = <input type="text" name="answer" required /></li>""") + self.assertHTMLEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" required></li> +<li>Favorite animal: <input type="text" name="animal" required></li> +<li>Secret answer = <input type="text" name="answer" required></li>""") f = FavoriteForm(auto_id=False, label_suffix='?') - self.assertHTMLEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" required /></li> -<li>Favorite animal? <input type="text" name="animal" required /></li> -<li>Secret answer = <input type="text" name="answer" required /></li>""") + self.assertHTMLEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" required></li> +<li>Favorite animal? <input type="text" name="animal" required></li> +<li>Secret answer = <input type="text" name="answer" required></li>""") f = FavoriteForm(auto_id=False, label_suffix='') - self.assertHTMLEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" required /></li> -<li>Favorite animal <input type="text" name="animal" required /></li> -<li>Secret answer = <input type="text" name="answer" required /></li>""") + self.assertHTMLEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" required></li> +<li>Favorite animal <input type="text" name="animal" required></li> +<li>Secret answer = <input type="text" name="answer" required></li>""") f = FavoriteForm(auto_id=False, label_suffix='\u2192') self.assertHTMLEqual( f.as_ul(), - '<li>Favorite color? <input type="text" name="color" required /></li>\n' - '<li>Favorite animal\u2192 <input type="text" name="animal" required /></li>\n' - '<li>Secret answer = <input type="text" name="answer" required /></li>' + '<li>Favorite color? <input type="text" name="color" required></li>\n' + '<li>Favorite animal\u2192 <input type="text" name="animal" required></li>\n' + '<li>Secret answer = <input type="text" name="answer" required></li>' ) def test_initial_data(self): @@ -1734,8 +1734,8 @@ value="Should escape < & > and <script>alert('xss')</ p = UserRegistration(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="django" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li>""" + """<li>Username: <input type="text" name="username" value="django" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li>""" ) # Here, we're submitting data, so the initial value will *not* be displayed. @@ -1743,24 +1743,24 @@ value="Should escape < & > and <script>alert('xss')</ self.assertHTMLEqual( p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul> -Username: <input type="text" name="username" maxlength="10" required /></li> +Username: <input type="text" name="username" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li>""" +Password: <input type="password" name="password" required></li>""" ) p = UserRegistration({'username': ''}, auto_id=False) self.assertHTMLEqual( p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul> -Username: <input type="text" name="username" maxlength="10" required /></li> +Username: <input type="text" name="username" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li>""" +Password: <input type="password" name="password" required></li>""" ) p = UserRegistration({'username': 'foo'}, auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="foo" maxlength="10" required /></li> + """<li>Username: <input type="text" name="username" value="foo" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li>""" +Password: <input type="password" name="password" required></li>""" ) # An 'initial' value is *not* used as a fallback if data is not provided. In this @@ -1784,14 +1784,14 @@ Password: <input type="password" name="password" required /></li>""" p = UserRegistration(initial={'username': 'django'}, auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="django" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li>""" + """<li>Username: <input type="text" name="username" value="django" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li>""" ) p = UserRegistration(initial={'username': 'stephane'}, auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="stephane" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li>""" + """<li>Username: <input type="text" name="username" value="stephane" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li>""" ) # The 'initial' parameter is meaningless if you pass data. @@ -1799,23 +1799,23 @@ Password: <input type="password" name="password" required /></li>""" self.assertHTMLEqual( p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul> -Username: <input type="text" name="username" maxlength="10" required /></li> +Username: <input type="text" name="username" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li>""" +Password: <input type="password" name="password" required></li>""" ) p = UserRegistration({'username': ''}, initial={'username': 'django'}, auto_id=False) self.assertHTMLEqual( p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul> -Username: <input type="text" name="username" maxlength="10" required /></li> +Username: <input type="text" name="username" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li>""" +Password: <input type="password" name="password" required></li>""" ) p = UserRegistration({'username': 'foo'}, initial={'username': 'django'}, auto_id=False) self.assertHTMLEqual( - p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" required /></li> + p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li>""" +Password: <input type="password" name="password" required></li>""" ) # A dynamic 'initial' value is *not* used as a fallback if data is not provided. @@ -1834,8 +1834,8 @@ Password: <input type="password" name="password" required /></li>""" p = UserRegistration(initial={'username': 'babik'}, auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="babik" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li>""" + """<li>Username: <input type="text" name="username" value="babik" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li>""" ) def test_callable_initial_data(self): @@ -1863,8 +1863,8 @@ Password: <input type="password" name="password" required /></li>""" p = UserRegistration(initial={'username': initial_django, 'options': initial_options}, auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="django" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li> + """<li>Username: <input type="text" name="username" value="django" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li> <li>Options: <select multiple name="options" required> <option value="f" selected>foo</option> <option value="b" selected>bar</option> @@ -1877,9 +1877,9 @@ Password: <input type="password" name="password" required /></li>""" self.assertHTMLEqual( p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul> -Username: <input type="text" name="username" maxlength="10" required /></li> +Username: <input type="text" name="username" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li> +Password: <input type="password" name="password" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> Options: <select multiple name="options" required> <option value="f">foo</option> @@ -1891,9 +1891,9 @@ Options: <select multiple name="options" required> self.assertHTMLEqual( p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul> - Username: <input type="text" name="username" maxlength="10" required /></li> + Username: <input type="text" name="username" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li> +Password: <input type="password" name="password" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> Options: <select multiple name="options" required> <option value="f">foo</option> @@ -1906,9 +1906,9 @@ Options: <select multiple name="options" required> ) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="foo" maxlength="10" required /></li> + """<li>Username: <input type="text" name="username" value="foo" maxlength="10" required></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /></li> +Password: <input type="password" name="password" required></li> <li>Options: <select multiple name="options" required> <option value="f" selected>foo</option> <option value="b" selected>bar</option> @@ -1936,8 +1936,8 @@ Password: <input type="password" name="password" required /></li> p = UserRegistration(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="django" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li> + """<li>Username: <input type="text" name="username" value="django" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li> <li>Options: <select multiple name="options" required> <option value="f">foo</option> <option value="b" selected>bar</option> @@ -1947,8 +1947,8 @@ Password: <input type="password" name="password" required /></li> p = UserRegistration(initial={'username': initial_stephane, 'options': initial_options}, auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="stephane" maxlength="10" required /></li> -<li>Password: <input type="password" name="password" required /></li> + """<li>Username: <input type="text" name="username" value="stephane" maxlength="10" required></li> +<li>Password: <input type="password" name="password" required></li> <li>Options: <select multiple name="options" required> <option value="f" selected>foo</option> <option value="b" selected>bar</option> @@ -2112,23 +2112,23 @@ Password: <input type="password" name="password" required /></li> p = UserRegistration(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" maxlength="10" required /> + """<li>Username: <input type="text" name="username" maxlength="10" required> <span class="helptext">e.g., user@example.com</span></li> -<li>Password: <input type="password" name="password" required /> +<li>Password: <input type="password" name="password" required> <span class="helptext">Wählen Sie mit Bedacht.</span></li>""" ) self.assertHTMLEqual( p.as_p(), - """<p>Username: <input type="text" name="username" maxlength="10" required /> + """<p>Username: <input type="text" name="username" maxlength="10" required> <span class="helptext">e.g., user@example.com</span></p> -<p>Password: <input type="password" name="password" required /> +<p>Password: <input type="password" name="password" required> <span class="helptext">Wählen Sie mit Bedacht.</span></p>""" ) self.assertHTMLEqual( p.as_table(), - """<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" required /><br /> + """<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" required><br> <span class="helptext">e.g., user@example.com</span></td></tr> -<tr><th>Password:</th><td><input type="password" name="password" required /><br /> +<tr><th>Password:</th><td><input type="password" name="password" required><br> <span class="helptext">Wählen Sie mit Bedacht.</span></td></tr>""" ) @@ -2136,10 +2136,10 @@ Password: <input type="password" name="password" required /></li> p = UserRegistration({'username': 'foo'}, auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" value="foo" maxlength="10" required /> + """<li>Username: <input type="text" name="username" value="foo" maxlength="10" required> <span class="helptext">e.g., user@example.com</span></li> <li><ul class="errorlist"><li>This field is required.</li></ul> -Password: <input type="password" name="password" required /> +Password: <input type="password" name="password" required> <span class="helptext">Wählen Sie mit Bedacht.</span></li>""" ) @@ -2153,10 +2153,10 @@ Password: <input type="password" name="password" required /> p = UserRegistration(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>Username: <input type="text" name="username" maxlength="10" required /> + """<li>Username: <input type="text" name="username" maxlength="10" required> <span class="helptext">e.g., user@example.com</span></li> -<li>Password: <input type="password" name="password" required /> -<input type="hidden" name="next" value="/" /></li>""" +<li>Password: <input type="password" name="password" required> +<input type="hidden" name="next" value="/"></li>""" ) def test_subclassing_forms(self): @@ -2174,17 +2174,17 @@ Password: <input type="password" name="password" required /> p = Person(auto_id=False) self.assertHTMLEqual( p.as_ul(), - """<li>First name: <input type="text" name="first_name" required /></li> -<li>Last name: <input type="text" name="last_name" required /></li> -<li>Birthday: <input type="text" name="birthday" required /></li>""" + """<li>First name: <input type="text" name="first_name" required></li> +<li>Last name: <input type="text" name="last_name" required></li> +<li>Birthday: <input type="text" name="birthday" required></li>""" ) m = Musician(auto_id=False) self.assertHTMLEqual( m.as_ul(), - """<li>First name: <input type="text" name="first_name" required /></li> -<li>Last name: <input type="text" name="last_name" required /></li> -<li>Birthday: <input type="text" name="birthday" required /></li> -<li>Instrument: <input type="text" name="instrument" required /></li>""" + """<li>First name: <input type="text" name="first_name" required></li> +<li>Last name: <input type="text" name="last_name" required></li> +<li>Birthday: <input type="text" name="birthday" required></li> +<li>Instrument: <input type="text" name="instrument" required></li>""" ) # Yes, you can subclass multiple forms. The fields are added in the order in @@ -2201,11 +2201,11 @@ Password: <input type="password" name="password" required /> haircut_type = CharField() b = Beatle(auto_id=False) - self.assertHTMLEqual(b.as_ul(), """<li>Instrument: <input type="text" name="instrument" required /></li> -<li>First name: <input type="text" name="first_name" required /></li> -<li>Last name: <input type="text" name="last_name" required /></li> -<li>Birthday: <input type="text" name="birthday" required /></li> -<li>Haircut type: <input type="text" name="haircut_type" required /></li>""") + self.assertHTMLEqual(b.as_ul(), """<li>Instrument: <input type="text" name="instrument" required></li> +<li>First name: <input type="text" name="first_name" required></li> +<li>Last name: <input type="text" name="last_name" required></li> +<li>Birthday: <input type="text" name="birthday" required></li> +<li>Haircut type: <input type="text" name="haircut_type" required></li>""") def test_forms_with_prefixes(self): # Sometimes it's necessary to have multiple forms display on the same HTML page, @@ -2229,23 +2229,23 @@ Password: <input type="password" name="password" required /> self.assertHTMLEqual( p.as_ul(), """<li><label for="id_person1-first_name">First name:</label> -<input type="text" name="person1-first_name" value="John" id="id_person1-first_name" required /></li> +<input type="text" name="person1-first_name" value="John" id="id_person1-first_name" required></li> <li><label for="id_person1-last_name">Last name:</label> -<input type="text" name="person1-last_name" value="Lennon" id="id_person1-last_name" required /></li> +<input type="text" name="person1-last_name" value="Lennon" id="id_person1-last_name" required></li> <li><label for="id_person1-birthday">Birthday:</label> -<input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" required /></li>""" +<input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" required></li>""" ) self.assertHTMLEqual( str(p['first_name']), - '<input type="text" name="person1-first_name" value="John" id="id_person1-first_name" required />' + '<input type="text" name="person1-first_name" value="John" id="id_person1-first_name" required>' ) self.assertHTMLEqual( str(p['last_name']), - '<input type="text" name="person1-last_name" value="Lennon" id="id_person1-last_name" required />' + '<input type="text" name="person1-last_name" value="Lennon" id="id_person1-last_name" required>' ) self.assertHTMLEqual( str(p['birthday']), - '<input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" required />' + '<input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" required>' ) self.assertEqual(p.errors, {}) self.assertTrue(p.is_valid()) @@ -2318,11 +2318,11 @@ Password: <input type="password" name="password" required /> self.assertHTMLEqual( p.as_ul(), """<li><label for="id_foo-prefix-first_name">First name:</label> -<input type="text" name="foo-prefix-first_name" id="id_foo-prefix-first_name" required /></li> +<input type="text" name="foo-prefix-first_name" id="id_foo-prefix-first_name" required></li> <li><label for="id_foo-prefix-last_name">Last name:</label> -<input type="text" name="foo-prefix-last_name" id="id_foo-prefix-last_name" required /></li> +<input type="text" name="foo-prefix-last_name" id="id_foo-prefix-last_name" required></li> <li><label for="id_foo-prefix-birthday">Birthday:</label> -<input type="text" name="foo-prefix-birthday" id="id_foo-prefix-birthday" required /></li>""" +<input type="text" name="foo-prefix-birthday" id="id_foo-prefix-birthday" required></li>""" ) data = { 'foo-prefix-first_name': 'John', @@ -2400,7 +2400,7 @@ Password: <input type="password" name="password" required /> f = FileForm(auto_id=False) self.assertHTMLEqual( f.as_table(), - '<tr><th>File1:</th><td><input type="file" name="file1" required /></td></tr>', + '<tr><th>File1:</th><td><input type="file" name="file1" required></td></tr>', ) f = FileForm(data={}, files={}, auto_id=False) @@ -2408,7 +2408,7 @@ Password: <input type="password" name="password" required /> f.as_table(), '<tr><th>File1:</th><td>' '<ul class="errorlist"><li>This field is required.</li></ul>' - '<input type="file" name="file1" required /></td></tr>' + '<input type="file" name="file1" required></td></tr>' ) f = FileForm(data={}, files={'file1': SimpleUploadedFile('name', b'')}, auto_id=False) @@ -2416,7 +2416,7 @@ Password: <input type="password" name="password" required /> f.as_table(), '<tr><th>File1:</th><td>' '<ul class="errorlist"><li>The submitted file is empty.</li></ul>' - '<input type="file" name="file1" required /></td></tr>' + '<input type="file" name="file1" required></td></tr>' ) f = FileForm(data={}, files={'file1': 'something that is not a file'}, auto_id=False) @@ -2425,13 +2425,13 @@ Password: <input type="password" name="password" required /> '<tr><th>File1:</th><td>' '<ul class="errorlist"><li>No file was submitted. Check the ' 'encoding type on the form.</li></ul>' - '<input type="file" name="file1" required /></td></tr>' + '<input type="file" name="file1" required></td></tr>' ) f = FileForm(data={}, files={'file1': SimpleUploadedFile('name', b'some content')}, auto_id=False) self.assertHTMLEqual( f.as_table(), - '<tr><th>File1:</th><td><input type="file" name="file1" required /></td></tr>', + '<tr><th>File1:</th><td><input type="file" name="file1" required></td></tr>', ) self.assertTrue(f.is_valid()) @@ -2439,7 +2439,7 @@ Password: <input type="password" name="password" required /> f = FileForm(data={}, files={'file1': file1}, auto_id=False) self.assertHTMLEqual( f.as_table(), - '<tr><th>File1:</th><td><input type="file" name="file1" required /></td></tr>', + '<tr><th>File1:</th><td><input type="file" name="file1" required></td></tr>', ) # A required file field with initial data should not contain the @@ -2448,7 +2448,7 @@ Password: <input type="password" name="password" required /> f = FileForm(initial={'file1': 'resume.txt'}, auto_id=False) self.assertHTMLEqual( f.as_table(), - '<tr><th>File1:</th><td><input type="file" name="file1" /></td></tr>', + '<tr><th>File1:</th><td><input type="file" name="file1"></td></tr>', ) def test_filefield_initial_callable(self): @@ -2483,18 +2483,18 @@ Password: <input type="password" name="password" required /> t = Template( '<form action="" method="post">\n' - '<table>\n{{ form }}\n</table>\n<input type="submit" required />\n</form>' + '<table>\n{{ form }}\n</table>\n<input type="submit" required>\n</form>' ) return t.render(Context({'form': form})) # Case 1: GET (an empty form, with no errors).) self.assertHTMLEqual(my_function('GET', {}), """<form action="" method="post"> <table> -<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" required /></td></tr> -<tr><th>Password1:</th><td><input type="password" name="password1" required /></td></tr> -<tr><th>Password2:</th><td><input type="password" name="password2" required /></td></tr> +<tr><th>Username:</th><td><input type="text" name="username" maxlength="10" required></td></tr> +<tr><th>Password1:</th><td><input type="password" name="password1" required></td></tr> +<tr><th>Password2:</th><td><input type="password" name="password2" required></td></tr> </table> -<input type="submit" required /> +<input type="submit" required> </form>""") # Case 2: POST with erroneous data (a redisplayed form, with errors).) self.assertHTMLEqual( @@ -2504,11 +2504,11 @@ Password: <input type="password" name="password" required /> <tr><td colspan="2"><ul class="errorlist nonfield"><li>Please make sure your passwords match.</li></ul></td></tr> <tr><th>Username:</th><td><ul class="errorlist"> <li>Ensure this value has at most 10 characters (it has 23).</li></ul> -<input type="text" name="username" value="this-is-a-long-username" maxlength="10" required /></td></tr> -<tr><th>Password1:</th><td><input type="password" name="password1" required /></td></tr> -<tr><th>Password2:</th><td><input type="password" name="password2" required /></td></tr> +<input type="text" name="username" value="this-is-a-long-username" maxlength="10" required></td></tr> +<tr><th>Password1:</th><td><input type="password" name="password1" required></td></tr> +<tr><th>Password2:</th><td><input type="password" name="password2" required></td></tr> </table> -<input type="submit" required /> +<input type="submit" required> </form>""" ) # Case 3: POST with valid data (the success message).) @@ -2539,23 +2539,23 @@ Password: <input type="password" name="password" required /> {{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p> {{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p> {{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p> -<input type="submit" required /> +<input type="submit" required> </form>''') self.assertHTMLEqual(t.render(Context({'form': UserRegistration(auto_id=False)})), """<form action=""> -<p><label>Your username: <input type="text" name="username" maxlength="10" required /></label></p> -<p><label>Password: <input type="password" name="password1" required /></label></p> -<p><label>Password (again): <input type="password" name="password2" required /></label></p> -<input type="submit" required /> +<p><label>Your username: <input type="text" name="username" maxlength="10" required></label></p> +<p><label>Password: <input type="password" name="password1" required></label></p> +<p><label>Password (again): <input type="password" name="password2" required></label></p> +<input type="submit" required> </form>""") self.assertHTMLEqual( t.render(Context({'form': UserRegistration({'username': 'django'}, auto_id=False)})), """<form action=""> -<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" required /></label></p> +<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" required></label></p> <ul class="errorlist"><li>This field is required.</li></ul><p> -<label>Password: <input type="password" name="password1" required /></label></p> +<label>Password: <input type="password" name="password1" required></label></p> <ul class="errorlist"><li>This field is required.</li></ul> -<p><label>Password (again): <input type="password" name="password2" required /></label></p> -<input type="submit" required /> +<p><label>Password (again): <input type="password" name="password2" required></label></p> +<input type="submit" required> </form>""" ) @@ -2567,13 +2567,13 @@ Password: <input type="password" name="password" required /> <p><label>{{ form.username.label }}: {{ form.username }}</label></p> <p><label>{{ form.password1.label }}: {{ form.password1 }}</label></p> <p><label>{{ form.password2.label }}: {{ form.password2 }}</label></p> -<input type="submit" required /> +<input type="submit" required> </form>''') self.assertHTMLEqual(t.render(Context({'form': UserRegistration(auto_id=False)})), """<form action=""> -<p><label>Username: <input type="text" name="username" maxlength="10" required /></label></p> -<p><label>Password1: <input type="password" name="password1" required /></label></p> -<p><label>Password2: <input type="password" name="password2" required /></label></p> -<input type="submit" required /> +<p><label>Username: <input type="text" name="username" maxlength="10" required></label></p> +<p><label>Password1: <input type="password" name="password1" required></label></p> +<p><label>Password2: <input type="password" name="password2" required></label></p> +<input type="submit" required> </form>""") # User form.[field].label_tag to output a field's label with a <label> tag @@ -2584,40 +2584,40 @@ Password: <input type="password" name="password" required /> <p>{{ form.username.label_tag }} {{ form.username }}</p> <p>{{ form.password1.label_tag }} {{ form.password1 }}</p> <p>{{ form.password2.label_tag }} {{ form.password2 }}</p> -<input type="submit" required /> +<input type="submit" required> </form>''') self.assertHTMLEqual(t.render(Context({'form': UserRegistration(auto_id=False)})), """<form action=""> -<p>Username: <input type="text" name="username" maxlength="10" required /></p> -<p>Password1: <input type="password" name="password1" required /></p> -<p>Password2: <input type="password" name="password2" required /></p> -<input type="submit" required /> +<p>Username: <input type="text" name="username" maxlength="10" required></p> +<p>Password1: <input type="password" name="password1" required></p> +<p>Password2: <input type="password" name="password2" required></p> +<input type="submit" required> </form>""") self.assertHTMLEqual(t.render(Context({'form': UserRegistration(auto_id='id_%s')})), """<form action=""> <p><label for="id_username">Username:</label> -<input id="id_username" type="text" name="username" maxlength="10" required /></p> +<input id="id_username" type="text" name="username" maxlength="10" required></p> <p><label for="id_password1">Password1:</label> -<input type="password" name="password1" id="id_password1" required /></p> +<input type="password" name="password1" id="id_password1" required></p> <p><label for="id_password2">Password2:</label> -<input type="password" name="password2" id="id_password2" required /></p> -<input type="submit" required /> +<input type="password" name="password2" id="id_password2" required></p> +<input type="submit" required> </form>""") # User form.[field].help_text to output a field's help text. If the given field # does not have help text, nothing will be output. t = Template('''<form action=""> -<p>{{ form.username.label_tag }} {{ form.username }}<br />{{ form.username.help_text }}</p> +<p>{{ form.username.label_tag }} {{ form.username }}<br>{{ form.username.help_text }}</p> <p>{{ form.password1.label_tag }} {{ form.password1 }}</p> <p>{{ form.password2.label_tag }} {{ form.password2 }}</p> -<input type="submit" required /> +<input type="submit" required> </form>''') self.assertHTMLEqual( t.render(Context({'form': UserRegistration(auto_id=False)})), """<form action=""> -<p>Username: <input type="text" name="username" maxlength="10" required /><br /> +<p>Username: <input type="text" name="username" maxlength="10" required><br> Good luck picking a username that doesn't already exist.</p> -<p>Password1: <input type="password" name="password1" required /></p> -<p>Password2: <input type="password" name="password2" required /></p> -<input type="submit" required /> +<p>Password1: <input type="password" name="password1" required></p> +<p>Password2: <input type="password" name="password2" required></p> +<input type="submit" required> </form>""" ) self.assertEqual( @@ -2633,17 +2633,17 @@ Good luck picking a username that doesn't already exist.</p> {{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p> {{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p> {{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p> -<input type="submit" required /> +<input type="submit" required> </form>''') self.assertHTMLEqual( t.render(Context({ 'form': UserRegistration({'username': 'django', 'password1': 'foo', 'password2': 'bar'}, auto_id=False) })), """<form action=""> -<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" required /></label></p> -<p><label>Password: <input type="password" name="password1" required /></label></p> -<p><label>Password (again): <input type="password" name="password2" required /></label></p> -<input type="submit" required /> +<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" required></label></p> +<p><label>Password: <input type="password" name="password1" required></label></p> +<p><label>Password (again): <input type="password" name="password2" required></label></p> +<input type="submit" required> </form>""" ) t = Template('''<form action=""> @@ -2651,7 +2651,7 @@ Good luck picking a username that doesn't already exist.</p> {{ form.username.errors.as_ul }}<p><label>Your username: {{ form.username }}</label></p> {{ form.password1.errors.as_ul }}<p><label>Password: {{ form.password1 }}</label></p> {{ form.password2.errors.as_ul }}<p><label>Password (again): {{ form.password2 }}</label></p> -<input type="submit" required /> +<input type="submit" required> </form>''') self.assertHTMLEqual( t.render(Context({ @@ -2659,10 +2659,10 @@ Good luck picking a username that doesn't already exist.</p> })), """<form action=""> <ul class="errorlist nonfield"><li>Please make sure your passwords match.</li></ul> -<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" required /></label></p> -<p><label>Password: <input type="password" name="password1" required /></label></p> -<p><label>Password (again): <input type="password" name="password2" required /></label></p> -<input type="submit" required /> +<p><label>Your username: <input type="text" name="username" value="django" maxlength="10" required></label></p> +<p><label>Password: <input type="password" name="password1" required></label></p> +<p><label>Password (again): <input type="password" name="password2" required></label></p> +<input type="submit" required> </form>""" ) @@ -2729,8 +2729,8 @@ Good luck picking a username that doesn't already exist.</p> self.assertHTMLEqual( MyForm().as_table(), '<tr><th><label for="id_field1">Field1:</label></th>' - '<td><input id="id_field1" type="text" name="field1" maxlength="50" required />' - '<input type="hidden" name="initial-field1" id="initial-id_field1" /></td></tr>' + '<td><input id="id_field1" type="text" name="field1" maxlength="50" required>' + '<input type="hidden" name="initial-field1" id="initial-id_field1"></td></tr>' ) def test_error_html_required_html_classes(self): @@ -2747,33 +2747,33 @@ Good luck picking a username that doesn't already exist.</p> self.assertHTMLEqual( p.as_ul(), """<li class="required error"><ul class="errorlist"><li>This field is required.</li></ul> -<label class="required" for="id_name">Name:</label> <input type="text" name="name" id="id_name" required /></li> +<label class="required" for="id_name">Name:</label> <input type="text" name="name" id="id_name" required></li> <li class="required"><label class="required" for="id_is_cool">Is cool:</label> <select name="is_cool" id="id_is_cool"> <option value="1" selected>Unknown</option> <option value="2">Yes</option> <option value="3">No</option> </select></li> -<li><label for="id_email">Email:</label> <input type="email" name="email" id="id_email" /></li> +<li><label for="id_email">Email:</label> <input type="email" name="email" id="id_email"></li> <li class="required error"><ul class="errorlist"><li>This field is required.</li></ul> -<label class="required" for="id_age">Age:</label> <input type="number" name="age" id="id_age" required /></li>""" +<label class="required" for="id_age">Age:</label> <input type="number" name="age" id="id_age" required></li>""" ) self.assertHTMLEqual( p.as_p(), """<ul class="errorlist"><li>This field is required.</li></ul> <p class="required error"><label class="required" for="id_name">Name:</label> -<input type="text" name="name" id="id_name" required /></p> +<input type="text" name="name" id="id_name" required></p> <p class="required"><label class="required" for="id_is_cool">Is cool:</label> <select name="is_cool" id="id_is_cool"> <option value="1" selected>Unknown</option> <option value="2">Yes</option> <option value="3">No</option> </select></p> -<p><label for="id_email">Email:</label> <input type="email" name="email" id="id_email" /></p> +<p><label for="id_email">Email:</label> <input type="email" name="email" id="id_email"></p> <ul class="errorlist"><li>This field is required.</li></ul> <p class="required error"><label class="required" for="id_age">Age:</label> -<input type="number" name="age" id="id_age" required /></p>""" +<input type="number" name="age" id="id_age" required></p>""" ) self.assertHTMLEqual( @@ -2781,7 +2781,7 @@ Good luck picking a username that doesn't already exist.</p> """<tr class="required error"> <th><label class="required" for="id_name">Name:</label></th> <td><ul class="errorlist"><li>This field is required.</li></ul> -<input type="text" name="name" id="id_name" required /></td></tr> +<input type="text" name="name" id="id_name" required></td></tr> <tr class="required"><th><label class="required" for="id_is_cool">Is cool:</label></th> <td><select name="is_cool" id="id_is_cool"> <option value="1" selected>Unknown</option> @@ -2789,10 +2789,10 @@ Good luck picking a username that doesn't already exist.</p> <option value="3">No</option> </select></td></tr> <tr><th><label for="id_email">Email:</label></th><td> -<input type="email" name="email" id="id_email" /></td></tr> +<input type="email" name="email" id="id_email"></td></tr> <tr class="required error"><th><label class="required" for="id_age">Age:</label></th> <td><ul class="errorlist"><li>This field is required.</li></ul> -<input type="number" name="age" id="id_age" required /></td></tr>""" +<input type="number" name="age" id="id_age" required></td></tr>""" ) def test_label_has_required_css_class(self): @@ -2819,8 +2819,8 @@ Good luck picking a username that doesn't already exist.</p> form = EventForm() self.assertHTMLEqual( form.as_ul(), - '<input type="hidden" name="happened_at_0" id="id_happened_at_0" />' - '<input type="hidden" name="happened_at_1" id="id_happened_at_1" />' + '<input type="hidden" name="happened_at_0" id="id_happened_at_0">' + '<input type="hidden" name="happened_at_1" id="id_happened_at_1">' ) def test_multivalue_field_validation(self): @@ -3155,9 +3155,9 @@ Good luck picking a username that doesn't already exist.</p> form = SomeForm() self.assertHTMLEqual( form.as_p(), - '<p><input id="id_custom" name="custom" type="text" required /> custom' - '<input id="id_hidden1" name="hidden1" type="hidden" />' - '<input id="id_hidden2" name="hidden2" type="hidden" /></p>' + '<p><input id="id_custom" name="custom" type="text" required> custom' + '<input id="id_hidden1" name="hidden1" type="hidden">' + '<input id="id_hidden2" name="hidden2" type="hidden"></p>' ) def test_field_name_with_hidden_input_and_non_matching_row_ender(self): @@ -3174,7 +3174,7 @@ Good luck picking a username that doesn't already exist.</p> return self._html_output( normal_row='<p%(html_class_attr)s>%(field)s %(field_name)s</p>', error_row='%s', - row_ender='<hr /><hr />', + row_ender='<hr><hr>', help_text_html=' %s', errors_on_separate_row=True ) @@ -3182,9 +3182,9 @@ Good luck picking a username that doesn't already exist.</p> form = SomeForm() self.assertHTMLEqual( form.as_p(), - '<p><input id="id_custom" name="custom" type="text" required /> custom</p>\n' - '<input id="id_hidden1" name="hidden1" type="hidden" />' - '<input id="id_hidden2" name="hidden2" type="hidden" /><hr /><hr />' + '<p><input id="id_custom" name="custom" type="text" required> custom</p>\n' + '<input id="id_hidden1" name="hidden1" type="hidden">' + '<input id="id_hidden2" name="hidden2" type="hidden"><hr><hr>' ) def test_error_dict(self): @@ -3312,23 +3312,23 @@ Good luck picking a username that doesn't already exist.</p> """<li><ul class="errorlist nonfield"> <li>(Hidden field last_name) This field is required.</li></ul></li><li> <label for="id_first_name">First name:</label> -<input id="id_first_name" name="first_name" type="text" value="John" required /> -<input id="id_last_name" name="last_name" type="hidden" /></li>""" +<input id="id_first_name" name="first_name" type="text" value="John" required> +<input id="id_last_name" name="last_name" type="hidden"></li>""" ) self.assertHTMLEqual( p.as_p(), """<ul class="errorlist nonfield"><li>(Hidden field last_name) This field is required.</li></ul> <p><label for="id_first_name">First name:</label> -<input id="id_first_name" name="first_name" type="text" value="John" required /> -<input id="id_last_name" name="last_name" type="hidden" /></p>""" +<input id="id_first_name" name="first_name" type="text" value="John" required> +<input id="id_last_name" name="last_name" type="hidden"></p>""" ) self.assertHTMLEqual( p.as_table(), """<tr><td colspan="2"><ul class="errorlist nonfield"> <li>(Hidden field last_name) This field is required.</li></ul></td></tr> <tr><th><label for="id_first_name">First name:</label></th><td> -<input id="id_first_name" name="first_name" type="text" value="John" required /> -<input id="id_last_name" name="last_name" type="hidden" /></td></tr>""" +<input id="id_first_name" name="first_name" type="text" value="John" required> +<input id="id_last_name" name="last_name" type="hidden"></td></tr>""" ) def test_error_list_with_non_field_errors_has_correct_class(self): @@ -3349,9 +3349,9 @@ Good luck picking a username that doesn't already exist.</p> """<li> <ul class="errorlist nonfield"><li>Generic validation error</li></ul></li> <li><label for="id_first_name">First name:</label> -<input id="id_first_name" name="first_name" type="text" value="John" required /></li> +<input id="id_first_name" name="first_name" type="text" value="John" required></li> <li><label for="id_last_name">Last name:</label> -<input id="id_last_name" name="last_name" type="text" value="Lennon" required /></li>""" +<input id="id_last_name" name="last_name" type="text" value="Lennon" required></li>""" ) self.assertHTMLEqual( p.non_field_errors().as_text(), @@ -3361,17 +3361,17 @@ Good luck picking a username that doesn't already exist.</p> p.as_p(), """<ul class="errorlist nonfield"><li>Generic validation error</li></ul> <p><label for="id_first_name">First name:</label> -<input id="id_first_name" name="first_name" type="text" value="John" required /></p> +<input id="id_first_name" name="first_name" type="text" value="John" required></p> <p><label for="id_last_name">Last name:</label> -<input id="id_last_name" name="last_name" type="text" value="Lennon" required /></p>""" +<input id="id_last_name" name="last_name" type="text" value="Lennon" required></p>""" ) self.assertHTMLEqual( p.as_table(), """<tr><td colspan="2"><ul class="errorlist nonfield"><li>Generic validation error</li></ul></td></tr> <tr><th><label for="id_first_name">First name:</label></th><td> -<input id="id_first_name" name="first_name" type="text" value="John" required /></td></tr> +<input id="id_first_name" name="first_name" type="text" value="John" required></td></tr> <tr><th><label for="id_last_name">Last name:</label></th><td> -<input id="id_last_name" name="last_name" type="text" value="Lennon" required /></td></tr>""" +<input id="id_last_name" name="last_name" type="text" value="Lennon" required></td></tr>""" ) def test_errorlist_override(self): @@ -3392,11 +3392,11 @@ Good luck picking a username that doesn't already exist.</p> data = {'email': 'invalid'} f = CommentForm(data, auto_id=False, error_class=DivErrorList) - self.assertHTMLEqual(f.as_p(), """<p>Name: <input type="text" name="name" maxlength="50" /></p> + self.assertHTMLEqual(f.as_p(), """<p>Name: <input type="text" name="name" maxlength="50"></p> <div class="errorlist"><div class="error">Enter a valid email address.</div></div> -<p>Email: <input type="email" name="email" value="invalid" required /></p> +<p>Email: <input type="email" name="email" value="invalid" required></p> <div class="errorlist"><div class="error">This field is required.</div></div> -<p>Comment: <input type="text" name="comment" required /></p>""") +<p>Comment: <input type="text" name="comment" required></p>""") def test_error_escaping(self): class TestForm(Form): @@ -3415,8 +3415,8 @@ Good luck picking a username that doesn't already exist.</p> '<li><ul class="errorlist nonfield"><li>(Hidden field hidden) Foo & "bar"!</li></ul></li>' '<li><ul class="errorlist"><li>Foo & "bar"!</li></ul>' '<label for="id_visible">Visible:</label> ' - '<input type="text" name="visible" value="b" id="id_visible" required />' - '<input type="hidden" name="hidden" value="a" id="id_hidden" /></li>' + '<input type="text" name="visible" value="b" id="id_visible" required>' + '<input type="hidden" name="hidden" value="a" id="id_hidden"></li>' ) def test_baseform_repr(self): @@ -3529,8 +3529,8 @@ Good luck picking a username that doesn't already exist.</p> form = MyForm() self.assertHTMLEqual( form.as_p(), - '<p><label for="id_f1">F1:</label> <input id="id_f1" maxlength="30" name="f1" type="text" required /></p>' - '<p><label for="id_f2">F2:</label> <input id="id_f2" maxlength="30" name="f2" type="text" /></p>' + '<p><label for="id_f1">F1:</label> <input id="id_f1" maxlength="30" name="f1" type="text" required></p>' + '<p><label for="id_f2">F2:</label> <input id="id_f2" maxlength="30" name="f2" type="text"></p>' '<p><label for="id_f3">F3:</label> <textarea cols="40" id="id_f3" name="f3" rows="10" required>' '</textarea></p>' '<p><label for="id_f4">F4:</label> <select id="id_f4" name="f4">' @@ -3541,8 +3541,8 @@ Good luck picking a username that doesn't already exist.</p> self.assertHTMLEqual( form.as_ul(), '<li><label for="id_f1">F1:</label> ' - '<input id="id_f1" maxlength="30" name="f1" type="text" required /></li>' - '<li><label for="id_f2">F2:</label> <input id="id_f2" maxlength="30" name="f2" type="text" /></li>' + '<input id="id_f1" maxlength="30" name="f1" type="text" required></li>' + '<li><label for="id_f2">F2:</label> <input id="id_f2" maxlength="30" name="f2" type="text"></li>' '<li><label for="id_f3">F3:</label> <textarea cols="40" id="id_f3" name="f3" rows="10" required>' '</textarea></li>' '<li><label for="id_f4">F4:</label> <select id="id_f4" name="f4">' @@ -3553,9 +3553,9 @@ Good luck picking a username that doesn't already exist.</p> self.assertHTMLEqual( form.as_table(), '<tr><th><label for="id_f1">F1:</label></th>' - '<td><input id="id_f1" maxlength="30" name="f1" type="text" required /></td></tr>' + '<td><input id="id_f1" maxlength="30" name="f1" type="text" required></td></tr>' '<tr><th><label for="id_f2">F2:</label></th>' - '<td><input id="id_f2" maxlength="30" name="f2" type="text" /></td></tr>' + '<td><input id="id_f2" maxlength="30" name="f2" type="text"></td></tr>' '<tr><th><label for="id_f3">F3:</label></th>' '<td><textarea cols="40" id="id_f3" name="f3" rows="10" required>' '</textarea></td></tr>' @@ -3576,8 +3576,8 @@ Good luck picking a username that doesn't already exist.</p> form = MyForm() self.assertHTMLEqual( form.as_p(), - '<p><label for="id_f1">F1:</label> <input id="id_f1" maxlength="30" name="f1" type="text" /></p>' - '<p><label for="id_f2">F2:</label> <input id="id_f2" maxlength="30" name="f2" type="text" /></p>' + '<p><label for="id_f1">F1:</label> <input id="id_f1" maxlength="30" name="f1" type="text"></p>' + '<p><label for="id_f2">F2:</label> <input id="id_f2" maxlength="30" name="f2" type="text"></p>' '<p><label for="id_f3">F3:</label> <textarea cols="40" id="id_f3" name="f3" rows="10">' '</textarea></p>' '<p><label for="id_f4">F4:</label> <select id="id_f4" name="f4">' @@ -3587,8 +3587,8 @@ Good luck picking a username that doesn't already exist.</p> ) self.assertHTMLEqual( form.as_ul(), - '<li><label for="id_f1">F1:</label> <input id="id_f1" maxlength="30" name="f1" type="text" /></li>' - '<li><label for="id_f2">F2:</label> <input id="id_f2" maxlength="30" name="f2" type="text" /></li>' + '<li><label for="id_f1">F1:</label> <input id="id_f1" maxlength="30" name="f1" type="text"></li>' + '<li><label for="id_f2">F2:</label> <input id="id_f2" maxlength="30" name="f2" type="text"></li>' '<li><label for="id_f3">F3:</label> <textarea cols="40" id="id_f3" name="f3" rows="10">' '</textarea></li>' '<li><label for="id_f4">F4:</label> <select id="id_f4" name="f4">' @@ -3599,9 +3599,9 @@ Good luck picking a username that doesn't already exist.</p> self.assertHTMLEqual( form.as_table(), '<tr><th><label for="id_f1">F1:</label></th>' - '<td><input id="id_f1" maxlength="30" name="f1" type="text" /></td></tr>' + '<td><input id="id_f1" maxlength="30" name="f1" type="text"></td></tr>' '<tr><th><label for="id_f2">F2:</label></th>' - '<td><input id="id_f2" maxlength="30" name="f2" type="text" /></td></tr>' + '<td><input id="id_f2" maxlength="30" name="f2" type="text"></td></tr>' '<tr><th><label for="id_f3">F3:</label></th><td><textarea cols="40" id="id_f3" name="f3" rows="10">' '</textarea></td></tr>' '<tr><th><label for="id_f4">F4:</label></th><td><select id="id_f4" name="f4">' @@ -3620,13 +3620,13 @@ Good luck picking a username that doesn't already exist.</p> f.as_p(), '<ul class="errorlist nonfield">' '<li>(Hidden field data) This field is required.</li></ul>\n<p> ' - '<input type="hidden" name="data" id="id_data" /></p>' + '<input type="hidden" name="data" id="id_data"></p>' ) self.assertHTMLEqual( f.as_table(), '<tr><td colspan="2"><ul class="errorlist nonfield">' '<li>(Hidden field data) This field is required.</li></ul>' - '<input type="hidden" name="data" id="id_data" /></td></tr>' + '<input type="hidden" name="data" id="id_data"></td></tr>' ) def test_field_named_data(self): diff --git a/tests/forms_tests/tests/test_formsets.py b/tests/forms_tests/tests/test_formsets.py index 6e8ca01261..7d06104791 100644 --- a/tests/forms_tests/tests/test_formsets.py +++ b/tests/forms_tests/tests/test_formsets.py @@ -87,12 +87,12 @@ class FormsFormsetTestCase(SimpleTestCase): formset = self.make_choiceformset() self.assertHTMLEqual( str(formset), - """<input type="hidden" name="choices-TOTAL_FORMS" value="1" /> -<input type="hidden" name="choices-INITIAL_FORMS" value="0" /> -<input type="hidden" name="choices-MIN_NUM_FORMS" value="0" /> -<input type="hidden" name="choices-MAX_NUM_FORMS" value="1000" /> -<tr><th>Choice:</th><td><input type="text" name="choices-0-choice" /></td></tr> -<tr><th>Votes:</th><td><input type="number" name="choices-0-votes" /></td></tr>""" + """<input type="hidden" name="choices-TOTAL_FORMS" value="1"> +<input type="hidden" name="choices-INITIAL_FORMS" value="0"> +<input type="hidden" name="choices-MIN_NUM_FORMS" value="0"> +<input type="hidden" name="choices-MAX_NUM_FORMS" value="1000"> +<tr><th>Choice:</th><td><input type="text" name="choices-0-choice"></td></tr> +<tr><th>Votes:</th><td><input type="number" name="choices-0-votes"></td></tr>""" ) # FormSet are treated similarly to Forms. FormSet has an is_valid() # method, and a cleaned_data or errors attribute depending on whether @@ -199,10 +199,10 @@ class FormsFormsetTestCase(SimpleTestCase): form_output.append(form.as_ul()) self.assertHTMLEqual( '\n'.join(form_output), - """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li> -<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li> -<li>Choice: <input type="text" name="choices-1-choice" /></li> -<li>Votes: <input type="number" name="choices-1-votes" /></li>""" + """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li> +<li>Votes: <input type="number" name="choices-0-votes" value="100"></li> +<li>Choice: <input type="text" name="choices-1-choice"></li> +<li>Votes: <input type="number" name="choices-1-votes"></li>""" ) def test_blank_form_unfilled(self): @@ -244,12 +244,12 @@ class FormsFormsetTestCase(SimpleTestCase): form_output.append(form.as_ul()) self.assertHTMLEqual( '\n'.join(form_output), - """<li>Choice: <input type="text" name="choices-0-choice" /></li> -<li>Votes: <input type="number" name="choices-0-votes" /></li> -<li>Choice: <input type="text" name="choices-1-choice" /></li> -<li>Votes: <input type="number" name="choices-1-votes" /></li> -<li>Choice: <input type="text" name="choices-2-choice" /></li> -<li>Votes: <input type="number" name="choices-2-votes" /></li>""" + """<li>Choice: <input type="text" name="choices-0-choice"></li> +<li>Votes: <input type="number" name="choices-0-votes"></li> +<li>Choice: <input type="text" name="choices-1-choice"></li> +<li>Votes: <input type="number" name="choices-1-votes"></li> +<li>Choice: <input type="text" name="choices-2-choice"></li> +<li>Votes: <input type="number" name="choices-2-votes"></li>""" ) # Since every form was displayed as blank, they are also accepted as # blank. This may seem a little strange, but min_num is used to require @@ -285,10 +285,10 @@ class FormsFormsetTestCase(SimpleTestCase): self.assertTrue(formset.forms[1].empty_permitted) self.assertHTMLEqual( '\n'.join(form_output), - """<li>Choice: <input type="text" name="choices-0-choice" /></li> -<li>Votes: <input type="number" name="choices-0-votes" /></li> -<li>Choice: <input type="text" name="choices-1-choice" /></li> -<li>Votes: <input type="number" name="choices-1-votes" /></li>""" + """<li>Choice: <input type="text" name="choices-0-choice"></li> +<li>Votes: <input type="number" name="choices-0-votes"></li> +<li>Choice: <input type="text" name="choices-1-choice"></li> +<li>Votes: <input type="number" name="choices-1-votes"></li>""" ) def test_min_num_displaying_more_than_one_blank_form_with_zero_extra(self): @@ -300,12 +300,12 @@ class FormsFormsetTestCase(SimpleTestCase): form_output.append(form.as_ul()) self.assertHTMLEqual( '\n'.join(form_output), - """<li>Choice: <input type="text" name="choices-0-choice" /></li> -<li>Votes: <input type="number" name="choices-0-votes" /></li> -<li>Choice: <input type="text" name="choices-1-choice" /></li> -<li>Votes: <input type="number" name="choices-1-votes" /></li> -<li>Choice: <input type="text" name="choices-2-choice" /></li> -<li>Votes: <input type="number" name="choices-2-votes" /></li>""" + """<li>Choice: <input type="text" name="choices-0-choice"></li> +<li>Votes: <input type="number" name="choices-0-votes"></li> +<li>Choice: <input type="text" name="choices-1-choice"></li> +<li>Votes: <input type="number" name="choices-1-votes"></li> +<li>Choice: <input type="text" name="choices-2-choice"></li> +<li>Votes: <input type="number" name="choices-2-votes"></li>""" ) def test_single_form_completed(self): @@ -439,21 +439,21 @@ class FormsFormsetTestCase(SimpleTestCase): form_output.append(form.as_ul()) self.assertHTMLEqual( '\n'.join(form_output), - """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li> -<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li> -<li>Choice: <input type="text" name="choices-1-choice" /></li> -<li>Votes: <input type="number" name="choices-1-votes" /></li> -<li>Choice: <input type="text" name="choices-2-choice" /></li> -<li>Votes: <input type="number" name="choices-2-votes" /></li> -<li>Choice: <input type="text" name="choices-3-choice" /></li> -<li>Votes: <input type="number" name="choices-3-votes" /></li>""" + """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li> +<li>Votes: <input type="number" name="choices-0-votes" value="100"></li> +<li>Choice: <input type="text" name="choices-1-choice"></li> +<li>Votes: <input type="number" name="choices-1-votes"></li> +<li>Choice: <input type="text" name="choices-2-choice"></li> +<li>Votes: <input type="number" name="choices-2-votes"></li> +<li>Choice: <input type="text" name="choices-3-choice"></li> +<li>Votes: <input type="number" name="choices-3-votes"></li>""" ) # Retrieving an empty form works. Tt shows up in the form list. self.assertTrue(formset.empty_form.empty_permitted) self.assertHTMLEqual( formset.empty_form.as_ul(), - """<li>Choice: <input type="text" name="choices-__prefix__-choice" /></li> -<li>Votes: <input type="number" name="choices-__prefix__-votes" /></li>""" + """<li>Choice: <input type="text" name="choices-__prefix__-choice"></li> +<li>Votes: <input type="number" name="choices-__prefix__-votes"></li>""" ) def test_formset_with_deletion(self): @@ -470,15 +470,15 @@ class FormsFormsetTestCase(SimpleTestCase): form_output.append(form.as_ul()) self.assertHTMLEqual( '\n'.join(form_output), - """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li> -<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li> -<li>Delete: <input type="checkbox" name="choices-0-DELETE" /></li> -<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li> -<li>Votes: <input type="number" name="choices-1-votes" value="900" /></li> -<li>Delete: <input type="checkbox" name="choices-1-DELETE" /></li> -<li>Choice: <input type="text" name="choices-2-choice" /></li> -<li>Votes: <input type="number" name="choices-2-votes" /></li> -<li>Delete: <input type="checkbox" name="choices-2-DELETE" /></li>""" + """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li> +<li>Votes: <input type="number" name="choices-0-votes" value="100"></li> +<li>Delete: <input type="checkbox" name="choices-0-DELETE"></li> +<li>Choice: <input type="text" name="choices-1-choice" value="Fergie"></li> +<li>Votes: <input type="number" name="choices-1-votes" value="900"></li> +<li>Delete: <input type="checkbox" name="choices-1-DELETE"></li> +<li>Choice: <input type="text" name="choices-2-choice"></li> +<li>Votes: <input type="number" name="choices-2-votes"></li> +<li>Delete: <input type="checkbox" name="choices-2-DELETE"></li>""" ) # To delete something, set that form's special delete field to 'on'. # Let's go ahead and delete Fergie. @@ -580,15 +580,15 @@ class FormsFormsetTestCase(SimpleTestCase): form_output.append(form.as_ul()) self.assertHTMLEqual( '\n'.join(form_output), - """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li> -<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li> -<li>Order: <input type="number" name="choices-0-ORDER" value="1" /></li> -<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li> -<li>Votes: <input type="number" name="choices-1-votes" value="900" /></li> -<li>Order: <input type="number" name="choices-1-ORDER" value="2" /></li> -<li>Choice: <input type="text" name="choices-2-choice" /></li> -<li>Votes: <input type="number" name="choices-2-votes" /></li> -<li>Order: <input type="number" name="choices-2-ORDER" /></li>""" + """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li> +<li>Votes: <input type="number" name="choices-0-votes" value="100"></li> +<li>Order: <input type="number" name="choices-0-ORDER" value="1"></li> +<li>Choice: <input type="text" name="choices-1-choice" value="Fergie"></li> +<li>Votes: <input type="number" name="choices-1-votes" value="900"></li> +<li>Order: <input type="number" name="choices-1-ORDER" value="2"></li> +<li>Choice: <input type="text" name="choices-2-choice"></li> +<li>Votes: <input type="number" name="choices-2-votes"></li> +<li>Order: <input type="number" name="choices-2-ORDER"></li>""" ) data = { 'choices-TOTAL_FORMS': '3', # the number of forms rendered @@ -684,22 +684,22 @@ class FormsFormsetTestCase(SimpleTestCase): form_output.append(form.as_ul()) self.assertHTMLEqual( '\n'.join(form_output), - """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li> -<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li> -<li>Order: <input type="number" name="choices-0-ORDER" value="1" /></li> -<li>Delete: <input type="checkbox" name="choices-0-DELETE" /></li> -<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li> -<li>Votes: <input type="number" name="choices-1-votes" value="900" /></li> -<li>Order: <input type="number" name="choices-1-ORDER" value="2" /></li> -<li>Delete: <input type="checkbox" name="choices-1-DELETE" /></li> -<li>Choice: <input type="text" name="choices-2-choice" value="The Decemberists" /></li> -<li>Votes: <input type="number" name="choices-2-votes" value="500" /></li> -<li>Order: <input type="number" name="choices-2-ORDER" value="3" /></li> -<li>Delete: <input type="checkbox" name="choices-2-DELETE" /></li> -<li>Choice: <input type="text" name="choices-3-choice" /></li> -<li>Votes: <input type="number" name="choices-3-votes" /></li> -<li>Order: <input type="number" name="choices-3-ORDER" /></li> -<li>Delete: <input type="checkbox" name="choices-3-DELETE" /></li>""" + """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li> +<li>Votes: <input type="number" name="choices-0-votes" value="100"></li> +<li>Order: <input type="number" name="choices-0-ORDER" value="1"></li> +<li>Delete: <input type="checkbox" name="choices-0-DELETE"></li> +<li>Choice: <input type="text" name="choices-1-choice" value="Fergie"></li> +<li>Votes: <input type="number" name="choices-1-votes" value="900"></li> +<li>Order: <input type="number" name="choices-1-ORDER" value="2"></li> +<li>Delete: <input type="checkbox" name="choices-1-DELETE"></li> +<li>Choice: <input type="text" name="choices-2-choice" value="The Decemberists"></li> +<li>Votes: <input type="number" name="choices-2-votes" value="500"></li> +<li>Order: <input type="number" name="choices-2-ORDER" value="3"></li> +<li>Delete: <input type="checkbox" name="choices-2-DELETE"></li> +<li>Choice: <input type="text" name="choices-3-choice"></li> +<li>Votes: <input type="number" name="choices-3-votes"></li> +<li>Order: <input type="number" name="choices-3-ORDER"></li> +<li>Delete: <input type="checkbox" name="choices-3-DELETE"></li>""" ) # Let's delete Fergie, and put The Decemberists ahead of Calexico. data = { @@ -803,11 +803,11 @@ class FormsFormsetTestCase(SimpleTestCase): self.assertHTMLEqual( '\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th> -<td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr> +<td><input type="text" name="form-0-name" id="id_form-0-name"></td></tr> <tr><th><label for="id_form-1-name">Name:</label></th> -<td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr> +<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr> <tr><th><label for="id_form-2-name">Name:</label></th> -<td><input type="text" name="form-2-name" id="id_form-2-name" /></td></tr>""" +<td><input type="text" name="form-2-name" id="id_form-2-name"></td></tr>""" ) # If max_num is 0 then no form is rendered at all. LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=3, max_num=0) @@ -826,9 +826,9 @@ class FormsFormsetTestCase(SimpleTestCase): self.assertHTMLEqual( '\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td> -<input type="text" name="form-0-name" id="id_form-0-name" /></td></tr> +<input type="text" name="form-0-name" id="id_form-0-name"></td></tr> <tr><th><label for="id_form-1-name">Name:</label></th> -<td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>""" +<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>""" ) def test_limiting_extra_lest_than_max_num(self): @@ -841,7 +841,7 @@ class FormsFormsetTestCase(SimpleTestCase): self.assertHTMLEqual( '\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th> -<td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>""" +<td><input type="text" name="form-0-name" id="id_form-0-name"></td></tr>""" ) def test_max_num_with_initial_data(self): @@ -860,9 +860,9 @@ class FormsFormsetTestCase(SimpleTestCase): self.assertHTMLEqual( '\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th> -<td><input type="text" name="form-0-name" value="Fernet and Coke" id="id_form-0-name" /></td></tr> +<td><input type="text" name="form-0-name" value="Fernet and Coke" id="id_form-0-name"></td></tr> <tr><th><label for="id_form-1-name">Name:</label></th> -<td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>""" +<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>""" ) def test_max_num_zero(self): @@ -891,9 +891,9 @@ class FormsFormsetTestCase(SimpleTestCase): self.assertHTMLEqual( '\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th> -<td><input id="id_form-0-name" name="form-0-name" type="text" value="Fernet and Coke" /></td></tr> +<td><input id="id_form-0-name" name="form-0-name" type="text" value="Fernet and Coke"></td></tr> <tr><th><label for="id_form-1-name">Name:</label></th> -<td><input id="id_form-1-name" name="form-1-name" type="text" value="Bloody Mary" /></td></tr>""" +<td><input id="id_form-1-name" name="form-1-name" type="text" value="Bloody Mary"></td></tr>""" ) def test_more_initial_than_max_num(self): @@ -914,11 +914,11 @@ class FormsFormsetTestCase(SimpleTestCase): self.assertHTMLEqual( '\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th> -<td><input id="id_form-0-name" name="form-0-name" type="text" value="Gin Tonic" /></td></tr> +<td><input id="id_form-0-name" name="form-0-name" type="text" value="Gin Tonic"></td></tr> <tr><th><label for="id_form-1-name">Name:</label></th> -<td><input id="id_form-1-name" name="form-1-name" type="text" value="Bloody Mary" /></td></tr> +<td><input id="id_form-1-name" name="form-1-name" type="text" value="Bloody Mary"></td></tr> <tr><th><label for="id_form-2-name">Name:</label></th> -<td><input id="id_form-2-name" name="form-2-name" type="text" value="Jack and Coke" /></td></tr>""" +<td><input id="id_form-2-name" name="form-2-name" type="text" value="Jack and Coke"></td></tr>""" ) def test_more_initial_form_result_in_one(self): @@ -937,9 +937,9 @@ class FormsFormsetTestCase(SimpleTestCase): self.assertHTMLEqual( '\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th> -<td><input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name" /></td></tr> +<td><input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name"></td></tr> <tr><th><label for="id_form-1-name">Name:</label></th> -<td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>""" +<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>""" ) def test_management_form_prefix(self): @@ -1195,36 +1195,36 @@ class FormsetAsFooTests(SimpleTestCase): formset = ChoiceFormSet(data, auto_id=False, prefix='choices') self.assertHTMLEqual( formset.as_table(), - """<input type="hidden" name="choices-TOTAL_FORMS" value="1" /> -<input type="hidden" name="choices-INITIAL_FORMS" value="0" /> -<input type="hidden" name="choices-MIN_NUM_FORMS" value="0" /> -<input type="hidden" name="choices-MAX_NUM_FORMS" value="0" /> -<tr><th>Choice:</th><td><input type="text" name="choices-0-choice" value="Calexico" /></td></tr> -<tr><th>Votes:</th><td><input type="number" name="choices-0-votes" value="100" /></td></tr>""" + """<input type="hidden" name="choices-TOTAL_FORMS" value="1"> +<input type="hidden" name="choices-INITIAL_FORMS" value="0"> +<input type="hidden" name="choices-MIN_NUM_FORMS" value="0"> +<input type="hidden" name="choices-MAX_NUM_FORMS" value="0"> +<tr><th>Choice:</th><td><input type="text" name="choices-0-choice" value="Calexico"></td></tr> +<tr><th>Votes:</th><td><input type="number" name="choices-0-votes" value="100"></td></tr>""" ) def test_as_p(self): formset = ChoiceFormSet(data, auto_id=False, prefix='choices') self.assertHTMLEqual( formset.as_p(), - """<input type="hidden" name="choices-TOTAL_FORMS" value="1" /> -<input type="hidden" name="choices-INITIAL_FORMS" value="0" /> -<input type="hidden" name="choices-MIN_NUM_FORMS" value="0" /> -<input type="hidden" name="choices-MAX_NUM_FORMS" value="0" /> -<p>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></p> -<p>Votes: <input type="number" name="choices-0-votes" value="100" /></p>""" + """<input type="hidden" name="choices-TOTAL_FORMS" value="1"> +<input type="hidden" name="choices-INITIAL_FORMS" value="0"> +<input type="hidden" name="choices-MIN_NUM_FORMS" value="0"> +<input type="hidden" name="choices-MAX_NUM_FORMS" value="0"> +<p>Choice: <input type="text" name="choices-0-choice" value="Calexico"></p> +<p>Votes: <input type="number" name="choices-0-votes" value="100"></p>""" ) def test_as_ul(self): formset = ChoiceFormSet(data, auto_id=False, prefix='choices') self.assertHTMLEqual( formset.as_ul(), - """<input type="hidden" name="choices-TOTAL_FORMS" value="1" /> -<input type="hidden" name="choices-INITIAL_FORMS" value="0" /> -<input type="hidden" name="choices-MIN_NUM_FORMS" value="0" /> -<input type="hidden" name="choices-MAX_NUM_FORMS" value="0" /> -<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li> -<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li>""" + """<input type="hidden" name="choices-TOTAL_FORMS" value="1"> +<input type="hidden" name="choices-INITIAL_FORMS" value="0"> +<input type="hidden" name="choices-MIN_NUM_FORMS" value="0"> +<input type="hidden" name="choices-MAX_NUM_FORMS" value="0"> +<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li> +<li>Votes: <input type="number" name="choices-0-votes" value="100"></li>""" ) diff --git a/tests/forms_tests/tests/test_i18n.py b/tests/forms_tests/tests/test_i18n.py index 73d5b270eb..be166514bf 100644 --- a/tests/forms_tests/tests/test_i18n.py +++ b/tests/forms_tests/tests/test_i18n.py @@ -15,7 +15,7 @@ class FormsI18nTests(SimpleTestCase): self.assertHTMLEqual( f.as_p(), '<p><label for="id_username">username:</label>' - '<input id="id_username" type="text" name="username" maxlength="10" required /></p>' + '<input id="id_username" type="text" name="username" maxlength="10" required></p>' ) # Translations are done at rendering time, so multi-lingual apps can define forms) @@ -23,13 +23,13 @@ class FormsI18nTests(SimpleTestCase): self.assertHTMLEqual( f.as_p(), '<p><label for="id_username">Benutzername:</label>' - '<input id="id_username" type="text" name="username" maxlength="10" required /></p>' + '<input id="id_username" type="text" name="username" maxlength="10" required></p>' ) with translation.override('pl'): self.assertHTMLEqual( f.as_p(), '<p><label for="id_username">u\u017cytkownik:</label>' - '<input id="id_username" type="text" name="username" maxlength="10" required /></p>' + '<input id="id_username" type="text" name="username" maxlength="10" required></p>' ) def test_non_ascii_label(self): @@ -59,12 +59,12 @@ class FormsI18nTests(SimpleTestCase): '<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label>' '<ul id="id_somechoice">\n' '<li><label for="id_somechoice_0">' - '<input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" required /> ' + '<input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" required> ' 'En tied\xe4</label></li>\n' '<li><label for="id_somechoice_1">' - '<input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" required /> ' + '<input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" required> ' 'Mies</label></li>\n<li><label for="id_somechoice_2">' - '<input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" required /> ' + '<input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" required> ' 'Nainen</label></li>\n</ul></p>' ) @@ -78,12 +78,12 @@ class FormsI18nTests(SimpleTestCase): '\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.</li></ul>\n' '<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label>' ' <ul id="id_somechoice">\n<li><label for="id_somechoice_0">' - '<input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" required /> ' + '<input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" required> ' 'En tied\xe4</label></li>\n' '<li><label for="id_somechoice_1">' - '<input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" required /> ' + '<input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" required> ' 'Mies</label></li>\n<li><label for="id_somechoice_2">' - '<input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" required /> ' + '<input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" required> ' 'Nainen</label></li>\n</ul></p>' ) diff --git a/tests/forms_tests/tests/test_media.py b/tests/forms_tests/tests/test_media.py index 2b73a041be..9798fc027b 100644 --- a/tests/forms_tests/tests/test_media.py +++ b/tests/forms_tests/tests/test_media.py @@ -19,8 +19,8 @@ class FormsMediaTestCase(SimpleTestCase): ) self.assertEqual( str(m), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""" @@ -40,8 +40,8 @@ class FormsMediaTestCase(SimpleTestCase): m3 = Media(Foo) self.assertEqual( str(m3), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""" @@ -72,8 +72,8 @@ class FormsMediaTestCase(SimpleTestCase): w1 = MyWidget1() self.assertEqual( str(w1.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""" @@ -82,8 +82,8 @@ class FormsMediaTestCase(SimpleTestCase): # Media objects can be interrogated by media type self.assertEqual( str(w1.media['css']), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />""" + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">""" ) self.assertEqual( @@ -122,9 +122,9 @@ class FormsMediaTestCase(SimpleTestCase): w3 = MyWidget3() self.assertEqual( str(w1.media + w2.media + w3.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> @@ -134,8 +134,8 @@ class FormsMediaTestCase(SimpleTestCase): # media addition hasn't affected the original objects self.assertEqual( str(w1.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""" @@ -150,7 +150,7 @@ class FormsMediaTestCase(SimpleTestCase): js = ('/path/to/js1', '/path/to/js1') w4 = MyWidget4() - self.assertEqual(str(w4.media), """<link href="/path/to/css1" type="text/css" media="all" rel="stylesheet" /> + self.assertEqual(str(w4.media), """<link href="/path/to/css1" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script>""") def test_media_property(self): @@ -165,7 +165,7 @@ class FormsMediaTestCase(SimpleTestCase): media = property(_media) w4 = MyWidget4() - self.assertEqual(str(w4.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet" /> + self.assertEqual(str(w4.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/some/js"></script>""") # Media properties can reference the media of their parents @@ -175,8 +175,8 @@ class FormsMediaTestCase(SimpleTestCase): media = property(_media) w5 = MyWidget5() - self.assertEqual(str(w5.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet" /> -<link href="/other/path" type="text/css" media="all" rel="stylesheet" /> + self.assertEqual(str(w5.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet"> +<link href="/other/path" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/some/js"></script> <script type="text/javascript" src="/other/js"></script>""") @@ -198,9 +198,9 @@ class FormsMediaTestCase(SimpleTestCase): w6 = MyWidget6() self.assertEqual( str(w6.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> -<link href="/other/path" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> +<link href="/other/path" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> @@ -226,8 +226,8 @@ class FormsMediaTestCase(SimpleTestCase): w7 = MyWidget7() self.assertEqual( str(w7.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>""" @@ -244,9 +244,9 @@ class FormsMediaTestCase(SimpleTestCase): w8 = MyWidget8() self.assertEqual( str(w8.media), - """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> -<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> +<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> @@ -278,8 +278,8 @@ class FormsMediaTestCase(SimpleTestCase): w9 = MyWidget9() self.assertEqual( str(w9.media), - """<link href="/some/path" type="text/css" media="all" rel="stylesheet" /> -<link href="/other/path" type="text/css" media="all" rel="stylesheet" /> + """<link href="/some/path" type="text/css" media="all" rel="stylesheet"> +<link href="/other/path" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/some/js"></script> <script type="text/javascript" src="/other/js"></script>""" ) @@ -294,8 +294,8 @@ class FormsMediaTestCase(SimpleTestCase): js = ('/path/to/js1', '/path/to/js4') w10 = MyWidget10() - self.assertEqual(str(w10.media), """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> -<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> + self.assertEqual(str(w10.media), """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> +<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="/path/to/js4"></script>""") @@ -319,9 +319,9 @@ class FormsMediaTestCase(SimpleTestCase): w11 = MyWidget11() self.assertEqual( str(w11.media), - """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> -<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> +<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> @@ -348,9 +348,9 @@ class FormsMediaTestCase(SimpleTestCase): w12 = MyWidget12() self.assertEqual( str(w12.media), - """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> -<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> +<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="/path/to/js4"></script>""" ) @@ -373,10 +373,10 @@ class FormsMediaTestCase(SimpleTestCase): multimedia = MultimediaWidget() self.assertEqual( str(multimedia.media), - """<link href="/file4" type="text/css" media="print" rel="stylesheet" /> -<link href="/file3" type="text/css" media="screen" rel="stylesheet" /> -<link href="/file1" type="text/css" media="screen, print" rel="stylesheet" /> -<link href="/file2" type="text/css" media="screen, print" rel="stylesheet" /> + """<link href="/file4" type="text/css" media="print" rel="stylesheet"> +<link href="/file3" type="text/css" media="screen" rel="stylesheet"> +<link href="/file1" type="text/css" media="screen, print" rel="stylesheet"> +<link href="/file2" type="text/css" media="screen, print" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="/path/to/js4"></script>""" ) @@ -417,9 +417,9 @@ class FormsMediaTestCase(SimpleTestCase): mymulti = MyMultiWidget() self.assertEqual( str(mymulti.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> @@ -459,9 +459,9 @@ class FormsMediaTestCase(SimpleTestCase): f1 = MyForm() self.assertEqual( str(f1.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> @@ -474,9 +474,9 @@ class FormsMediaTestCase(SimpleTestCase): f2 = AnotherForm() self.assertEqual( str(f1.media + f2.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> @@ -496,10 +496,10 @@ class FormsMediaTestCase(SimpleTestCase): f3 = FormWithMedia() self.assertEqual( str(f3.media), - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> -<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" /> + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> +<link href="/some/form/css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> @@ -515,10 +515,10 @@ class FormsMediaTestCase(SimpleTestCase): <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> <script type="text/javascript" src="/path/to/js4"></script> <script type="text/javascript" src="/some/form/javascript"></script>""" - """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" /> -<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />""" + """<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet"> +<link href="/some/form/css" type="text/css" media="all" rel="stylesheet">""" ) def test_html_safe(self): diff --git a/tests/forms_tests/tests/tests.py b/tests/forms_tests/tests/tests.py index bf0d588f53..841a1c6799 100644 --- a/tests/forms_tests/tests/tests.py +++ b/tests/forms_tests/tests/tests.py @@ -109,24 +109,24 @@ class ModelFormCallableModelDefault(TestCase): <option value="1" selected>ChoiceOption 1</option> <option value="2">ChoiceOption 2</option> <option value="3">ChoiceOption 3</option> -</select><input type="hidden" name="initial-choice" value="1" id="initial-id_choice" /></p> +</select><input type="hidden" name="initial-choice" value="1" id="initial-id_choice"></p> <p><label for="id_choice_int">Choice int:</label> <select name="choice_int" id="id_choice_int"> <option value="1" selected>ChoiceOption 1</option> <option value="2">ChoiceOption 2</option> <option value="3">ChoiceOption 3</option> -</select><input type="hidden" name="initial-choice_int" value="1" id="initial-id_choice_int" /></p> +</select><input type="hidden" name="initial-choice_int" value="1" id="initial-id_choice_int"></p> <p><label for="id_multi_choice">Multi choice:</label> <select multiple name="multi_choice" id="id_multi_choice" required> <option value="1" selected>ChoiceOption 1</option> <option value="2">ChoiceOption 2</option> <option value="3">ChoiceOption 3</option> -</select><input type="hidden" name="initial-multi_choice" value="1" id="initial-id_multi_choice_0" /></p> +</select><input type="hidden" name="initial-multi_choice" value="1" id="initial-id_multi_choice_0"></p> <p><label for="id_multi_choice_int">Multi choice int:</label> <select multiple name="multi_choice_int" id="id_multi_choice_int" required> <option value="1" selected>ChoiceOption 1</option> <option value="2">ChoiceOption 2</option> <option value="3">ChoiceOption 3</option> -</select><input type="hidden" name="initial-multi_choice_int" value="1" id="initial-id_multi_choice_int_0" /></p>""" +</select><input type="hidden" name="initial-multi_choice_int" value="1" id="initial-id_multi_choice_int_0"></p>""" ) def test_initial_instance_value(self): @@ -145,26 +145,26 @@ class ModelFormCallableModelDefault(TestCase): <option value="1">ChoiceOption 1</option> <option value="2" selected>ChoiceOption 2</option> <option value="3">ChoiceOption 3</option> -</select><input type="hidden" name="initial-choice" value="2" id="initial-id_choice" /></p> +</select><input type="hidden" name="initial-choice" value="2" id="initial-id_choice"></p> <p><label for="id_choice_int">Choice int:</label> <select name="choice_int" id="id_choice_int"> <option value="1">ChoiceOption 1</option> <option value="2" selected>ChoiceOption 2</option> <option value="3">ChoiceOption 3</option> -</select><input type="hidden" name="initial-choice_int" value="2" id="initial-id_choice_int" /></p> +</select><input type="hidden" name="initial-choice_int" value="2" id="initial-id_choice_int"></p> <p><label for="id_multi_choice">Multi choice:</label> <select multiple name="multi_choice" id="id_multi_choice" required> <option value="1">ChoiceOption 1</option> <option value="2" selected>ChoiceOption 2</option> <option value="3" selected>ChoiceOption 3</option> -</select><input type="hidden" name="initial-multi_choice" value="2" id="initial-id_multi_choice_0" /> -<input type="hidden" name="initial-multi_choice" value="3" id="initial-id_multi_choice_1" /></p> +</select><input type="hidden" name="initial-multi_choice" value="2" id="initial-id_multi_choice_0"> +<input type="hidden" name="initial-multi_choice" value="3" id="initial-id_multi_choice_1"></p> <p><label for="id_multi_choice_int">Multi choice int:</label> <select multiple name="multi_choice_int" id="id_multi_choice_int" required> <option value="1">ChoiceOption 1</option> <option value="2" selected>ChoiceOption 2</option> <option value="3" selected>ChoiceOption 3</option> -</select><input type="hidden" name="initial-multi_choice_int" value="2" id="initial-id_multi_choice_int_0" /> -<input type="hidden" name="initial-multi_choice_int" value="3" id="initial-id_multi_choice_int_1" /></p>""" +</select><input type="hidden" name="initial-multi_choice_int" value="2" id="initial-id_multi_choice_int_0"> +<input type="hidden" name="initial-multi_choice_int" value="3" id="initial-id_multi_choice_int_1"></p>""" ) @@ -308,7 +308,7 @@ class EmptyLabelTestCase(TestCase): f = EmptyCharLabelChoiceForm() self.assertHTMLEqual( f.as_p(), - """<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required /></p> + """<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required></p> <p><label for="id_choice">Choice:</label> <select id="id_choice" name="choice"> <option value="" selected>No Preference</option> <option value="f">Foo</option> @@ -320,7 +320,7 @@ class EmptyLabelTestCase(TestCase): f = EmptyCharLabelNoneChoiceForm() self.assertHTMLEqual( f.as_p(), - """<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required /></p> + """<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required></p> <p><label for="id_choice_string_w_none">Choice string w none:</label> <select id="id_choice_string_w_none" name="choice_string_w_none"> <option value="" selected>No Preference</option> @@ -350,7 +350,7 @@ class EmptyLabelTestCase(TestCase): f = EmptyIntegerLabelChoiceForm() self.assertHTMLEqual( f.as_p(), - """<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required /></p> + """<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required></p> <p><label for="id_choice_integer">Choice integer:</label> <select id="id_choice_integer" name="choice_integer"> <option value="" selected>No Preference</option> @@ -370,7 +370,7 @@ class EmptyLabelTestCase(TestCase): self.assertHTMLEqual( f.as_p(), """<p><label for="id_name">Name:</label> -<input id="id_name" maxlength="10" name="name" type="text" value="none-test" required /></p> +<input id="id_name" maxlength="10" name="name" type="text" value="none-test" required></p> <p><label for="id_choice_integer">Choice integer:</label> <select id="id_choice_integer" name="choice_integer"> <option value="" selected>No Preference</option> @@ -384,7 +384,7 @@ class EmptyLabelTestCase(TestCase): self.assertHTMLEqual( f.as_p(), """<p><label for="id_name">Name:</label> -<input id="id_name" maxlength="10" name="name" type="text" value="foo-test" required /></p> +<input id="id_name" maxlength="10" name="name" type="text" value="foo-test" required></p> <p><label for="id_choice_integer">Choice integer:</label> <select id="id_choice_integer" name="choice_integer"> <option value="">No Preference</option> diff --git a/tests/forms_tests/widget_tests/test_checkboxinput.py b/tests/forms_tests/widget_tests/test_checkboxinput.py index 1ae6ab73b6..6483b7f211 100644 --- a/tests/forms_tests/widget_tests/test_checkboxinput.py +++ b/tests/forms_tests/widget_tests/test_checkboxinput.py @@ -7,18 +7,18 @@ class CheckboxInputTest(WidgetTest): widget = CheckboxInput() def test_render_empty(self): - self.check_html(self.widget, 'is_cool', '', html='<input type="checkbox" name="is_cool" />') + self.check_html(self.widget, 'is_cool', '', html='<input type="checkbox" name="is_cool">') def test_render_none(self): - self.check_html(self.widget, 'is_cool', None, html='<input type="checkbox" name="is_cool" />') + self.check_html(self.widget, 'is_cool', None, html='<input type="checkbox" name="is_cool">') def test_render_false(self): - self.check_html(self.widget, 'is_cool', False, html='<input type="checkbox" name="is_cool" />') + self.check_html(self.widget, 'is_cool', False, html='<input type="checkbox" name="is_cool">') def test_render_true(self): self.check_html( self.widget, 'is_cool', True, - html='<input checked type="checkbox" name="is_cool" />' + html='<input checked type="checkbox" name="is_cool">' ) def test_render_value(self): @@ -28,7 +28,7 @@ class CheckboxInputTest(WidgetTest): """ self.check_html( self.widget, 'is_cool', 'foo', - html='<input checked type="checkbox" name="is_cool" value="foo" />', + html='<input checked type="checkbox" name="is_cool" value="foo">', ) def test_render_int(self): @@ -37,11 +37,11 @@ class CheckboxInputTest(WidgetTest): """ self.check_html( self.widget, 'is_cool', 0, - html='<input checked type="checkbox" name="is_cool" value="0" />', + html='<input checked type="checkbox" name="is_cool" value="0">', ) self.check_html( self.widget, 'is_cool', 1, - html='<input checked type="checkbox" name="is_cool" value="1" />', + html='<input checked type="checkbox" name="is_cool" value="1">', ) def test_render_check_test(self): @@ -51,16 +51,16 @@ class CheckboxInputTest(WidgetTest): """ widget = CheckboxInput(check_test=lambda value: value.startswith('hello')) self.check_html(widget, 'greeting', '', html=( - '<input type="checkbox" name="greeting" />' + '<input type="checkbox" name="greeting">' )) self.check_html(widget, 'greeting', 'hello', html=( - '<input checked type="checkbox" name="greeting" value="hello" />' + '<input checked type="checkbox" name="greeting" value="hello">' )) self.check_html(widget, 'greeting', 'hello there', html=( - '<input checked type="checkbox" name="greeting" value="hello there" />' + '<input checked type="checkbox" name="greeting" value="hello there">' )) self.check_html(widget, 'greeting', 'hello & goodbye', html=( - '<input checked type="checkbox" name="greeting" value="hello & goodbye" />' + '<input checked type="checkbox" name="greeting" value="hello & goodbye">' )) def test_render_check_exception(self): diff --git a/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py b/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py index 239f80da47..ef31ce9d36 100644 --- a/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py +++ b/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py @@ -13,20 +13,20 @@ class CheckboxSelectMultipleTest(WidgetTest): def test_render_value(self): self.check_html(self.widget(choices=self.beatles), 'beatles', ['J'], html=( """<ul> - <li><label><input checked type="checkbox" name="beatles" value="J" /> John</label></li> - <li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li> - <li><label><input type="checkbox" name="beatles" value="G" /> George</label></li> - <li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li> + <li><label><input checked type="checkbox" name="beatles" value="J"> John</label></li> + <li><label><input type="checkbox" name="beatles" value="P"> Paul</label></li> + <li><label><input type="checkbox" name="beatles" value="G"> George</label></li> + <li><label><input type="checkbox" name="beatles" value="R"> Ringo</label></li> </ul>""" )) def test_render_value_multiple(self): self.check_html(self.widget(choices=self.beatles), 'beatles', ['J', 'P'], html=( """<ul> - <li><label><input checked type="checkbox" name="beatles" value="J" /> John</label></li> - <li><label><input checked type="checkbox" name="beatles" value="P" /> Paul</label></li> - <li><label><input type="checkbox" name="beatles" value="G" /> George</label></li> - <li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li> + <li><label><input checked type="checkbox" name="beatles" value="J"> John</label></li> + <li><label><input checked type="checkbox" name="beatles" value="P"> Paul</label></li> + <li><label><input type="checkbox" name="beatles" value="G"> George</label></li> + <li><label><input type="checkbox" name="beatles" value="R"> Ringo</label></li> </ul>""" )) @@ -36,10 +36,10 @@ class CheckboxSelectMultipleTest(WidgetTest): """ self.check_html(self.widget(choices=self.beatles), 'beatles', None, html=( """<ul> - <li><label><input type="checkbox" name="beatles" value="J" /> John</label></li> - <li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li> - <li><label><input type="checkbox" name="beatles" value="G" /> George</label></li> - <li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li> + <li><label><input type="checkbox" name="beatles" value="J"> John</label></li> + <li><label><input type="checkbox" name="beatles" value="P"> Paul</label></li> + <li><label><input type="checkbox" name="beatles" value="G"> George</label></li> + <li><label><input type="checkbox" name="beatles" value="R"> Ringo</label></li> </ul>""" )) @@ -52,25 +52,25 @@ class CheckboxSelectMultipleTest(WidgetTest): html = """ <ul id="media"> <li> - <label for="media_0"><input id="media_0" name="nestchoice" type="checkbox" value="unknown" /> Unknown</label> + <label for="media_0"><input id="media_0" name="nestchoice" type="checkbox" value="unknown"> Unknown</label> </li> <li>Audio<ul id="media_1"> <li> <label for="media_1_0"> - <input checked id="media_1_0" name="nestchoice" type="checkbox" value="vinyl" /> Vinyl + <input checked id="media_1_0" name="nestchoice" type="checkbox" value="vinyl"> Vinyl </label> </li> <li> - <label for="media_1_1"><input id="media_1_1" name="nestchoice" type="checkbox" value="cd" /> CD</label> + <label for="media_1_1"><input id="media_1_1" name="nestchoice" type="checkbox" value="cd"> CD</label> </li> </ul></li> <li>Video<ul id="media_2"> <li> - <label for="media_2_0"><input id="media_2_0" name="nestchoice" type="checkbox" value="vhs" /> VHS</label> + <label for="media_2_0"><input id="media_2_0" name="nestchoice" type="checkbox" value="vhs"> VHS</label> </li> <li> <label for="media_2_1"> - <input checked id="media_2_1" name="nestchoice" type="checkbox" value="dvd" /> DVD + <input checked id="media_2_1" name="nestchoice" type="checkbox" value="dvd"> DVD </label> </li> </ul></li> @@ -90,25 +90,25 @@ class CheckboxSelectMultipleTest(WidgetTest): html = """ <ul> <li> - <label><input name="nestchoice" type="checkbox" value="unknown" /> Unknown</label> + <label><input name="nestchoice" type="checkbox" value="unknown"> Unknown</label> </li> <li>Audio<ul> <li> <label> - <input checked name="nestchoice" type="checkbox" value="vinyl" /> Vinyl + <input checked name="nestchoice" type="checkbox" value="vinyl"> Vinyl </label> </li> <li> - <label><input name="nestchoice" type="checkbox" value="cd" /> CD</label> + <label><input name="nestchoice" type="checkbox" value="cd"> CD</label> </li> </ul></li> <li>Video<ul> <li> - <label><input name="nestchoice" type="checkbox" value="vhs" /> VHS</label> + <label><input name="nestchoice" type="checkbox" value="vhs"> VHS</label> </li> <li> <label> - <input checked name="nestchoice" type="checkbox" value="dvd" /> DVD + <input checked name="nestchoice" type="checkbox" value="dvd"> DVD </label> </li> </ul></li> @@ -124,11 +124,11 @@ class CheckboxSelectMultipleTest(WidgetTest): html = """ <ul id="abc"> <li> - <label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0" /> A</label> + <label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0"> A</label> </li> - <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li> + <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1"> B</label></li> <li> - <label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2" /> C</label> + <label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2"> C</label> </li> </ul> """ @@ -142,11 +142,11 @@ class CheckboxSelectMultipleTest(WidgetTest): html = """ <ul id="abc"> <li> - <label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0" /> A</label> + <label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0"> A</label> </li> - <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li> + <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1"> B</label></li> <li> - <label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2" /> C</label> + <label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2"> C</label> </li> </ul> """ @@ -161,9 +161,9 @@ class CheckboxSelectMultipleTest(WidgetTest): ] html = """ <ul> - <li><label><input type="checkbox" name="numbers" value="1" /> One</label></li> - <li><label><input type="checkbox" name="numbers" value="1000" /> One thousand</label></li> - <li><label><input type="checkbox" name="numbers" value="1000000" /> One million</label></li> + <li><label><input type="checkbox" name="numbers" value="1"> One</label></li> + <li><label><input type="checkbox" name="numbers" value="1000"> One thousand</label></li> + <li><label><input type="checkbox" name="numbers" value="1000000"> One million</label></li> </ul> """ self.check_html(self.widget(choices=choices), 'numbers', None, html=html) @@ -174,8 +174,8 @@ class CheckboxSelectMultipleTest(WidgetTest): ] html = """ <ul> - <li><label><input type="checkbox" name="times" value="00:00:00" /> midnight</label></li> - <li><label><input type="checkbox" name="times" value="12:00:00" /> noon</label></li> + <li><label><input type="checkbox" name="times" value="00:00:00"> midnight</label></li> + <li><label><input type="checkbox" name="times" value="12:00:00"> noon</label></li> </ul> """ self.check_html(self.widget(choices=choices), 'times', None, html=html) diff --git a/tests/forms_tests/widget_tests/test_clearablefileinput.py b/tests/forms_tests/widget_tests/test_clearablefileinput.py index f338269d09..2ba376db8a 100644 --- a/tests/forms_tests/widget_tests/test_clearablefileinput.py +++ b/tests/forms_tests/widget_tests/test_clearablefileinput.py @@ -26,9 +26,9 @@ class ClearableFileInputTest(WidgetTest): self.check_html(self.widget, 'myfile', FakeFieldFile(), html=( """ Currently: <a href="something">something</a> - <input type="checkbox" name="myfile-clear" id="myfile-clear_id" /> - <label for="myfile-clear_id">Clear</label><br /> - Change: <input type="file" name="myfile" /> + <input type="checkbox" name="myfile-clear" id="myfile-clear_id"> + <label for="myfile-clear_id">Clear</label><br> + Change: <input type="file" name="myfile"> """ )) @@ -47,9 +47,9 @@ class ClearableFileInputTest(WidgetTest): """ Currently: <a href="something?chapter=1&sect=2&copy=3&lang=en"> something<div onclick="alert('oops')">.jpg</a> - <input type="checkbox" name="my<div>file-clear" id="my<div>file-clear_id" /> - <label for="my<div>file-clear_id">Clear</label><br /> - Change: <input type="file" name="my<div>file" /> + <input type="checkbox" name="my<div>file-clear" id="my<div>file-clear_id"> + <label for="my<div>file-clear_id">Clear</label><br> + Change: <input type="file" name="my<div>file"> """ )) @@ -62,8 +62,8 @@ class ClearableFileInputTest(WidgetTest): widget.is_required = True self.check_html(widget, 'myfile', FakeFieldFile(), html=( """ - Currently: <a href="something">something</a> <br /> - Change: <input type="file" name="myfile" /> + Currently: <a href="something">something</a> <br> + Change: <input type="file" name="myfile"> """ )) @@ -72,7 +72,7 @@ class ClearableFileInputTest(WidgetTest): A ClearableFileInput instantiated with no initial value does not render a clear checkbox. """ - self.check_html(self.widget, 'myfile', None, html='<input type="file" name="myfile" />') + self.check_html(self.widget, 'myfile', None, html='<input type="file" name="myfile">') def test_render_as_subwidget(self): """A ClearableFileInput as a subwidget of MultiWidget.""" @@ -80,9 +80,9 @@ class ClearableFileInputTest(WidgetTest): self.check_html(widget, 'myfile', [FakeFieldFile()], html=( """ Currently: <a href="something">something</a> - <input type="checkbox" name="myfile_0-clear" id="myfile_0-clear_id" /> - <label for="myfile_0-clear_id">Clear</label><br /> - Change: <input type="file" name="myfile_0" /> + <input type="checkbox" name="myfile_0-clear" id="myfile_0-clear_id"> + <label for="myfile_0-clear_id">Clear</label><br> + Change: <input type="file" name="myfile_0"> """ )) @@ -148,7 +148,7 @@ class ClearableFileInputTest(WidgetTest): return 'value' html = self.widget.render('myfile', NoURLFieldFile()) - self.assertHTMLEqual(html, '<input name="myfile" type="file" />') + self.assertHTMLEqual(html, '<input name="myfile" type="file">') def test_use_required_attribute(self): # False when initial data exists. The file input is left blank by the diff --git a/tests/forms_tests/widget_tests/test_dateinput.py b/tests/forms_tests/widget_tests/test_dateinput.py index 3cf15fed8a..8fae6c672a 100644 --- a/tests/forms_tests/widget_tests/test_dateinput.py +++ b/tests/forms_tests/widget_tests/test_dateinput.py @@ -11,15 +11,15 @@ class DateInputTest(WidgetTest): widget = DateInput() def test_render_none(self): - self.check_html(self.widget, 'date', None, html='<input type="text" name="date" />') + self.check_html(self.widget, 'date', None, html='<input type="text" name="date">') def test_render_value(self): d = date(2007, 9, 17) self.assertEqual(str(d), '2007-09-17') - self.check_html(self.widget, 'date', d, html='<input type="text" name="date" value="2007-09-17" />') + self.check_html(self.widget, 'date', d, html='<input type="text" name="date" value="2007-09-17">') self.check_html(self.widget, 'date', date(2007, 9, 17), html=( - '<input type="text" name="date" value="2007-09-17" />' + '<input type="text" name="date" value="2007-09-17">' )) def test_string(self): @@ -27,7 +27,7 @@ class DateInputTest(WidgetTest): Should be able to initialize from a string value. """ self.check_html(self.widget, 'date', '2007-09-17', html=( - '<input type="text" name="date" value="2007-09-17" />' + '<input type="text" name="date" value="2007-09-17">' )) def test_format(self): @@ -36,12 +36,12 @@ class DateInputTest(WidgetTest): """ d = date(2007, 9, 17) widget = DateInput(format='%d/%m/%Y', attrs={'type': 'date'}) - self.check_html(widget, 'date', d, html='<input type="date" name="date" value="17/09/2007" />') + self.check_html(widget, 'date', d, html='<input type="date" name="date" value="17/09/2007">') @override_settings(USE_L10N=True) @translation.override('de-at') def test_l10n(self): self.check_html( self.widget, 'date', date(2007, 9, 17), - html='<input type="text" name="date" value="17.09.2007" />', + html='<input type="text" name="date" value="17.09.2007">', ) diff --git a/tests/forms_tests/widget_tests/test_datetimeinput.py b/tests/forms_tests/widget_tests/test_datetimeinput.py index 50fd7f5442..682ded3c84 100644 --- a/tests/forms_tests/widget_tests/test_datetimeinput.py +++ b/tests/forms_tests/widget_tests/test_datetimeinput.py @@ -11,7 +11,7 @@ class DateTimeInputTest(WidgetTest): widget = DateTimeInput() def test_render_none(self): - self.check_html(self.widget, 'date', None, '<input type="text" name="date" />') + self.check_html(self.widget, 'date', None, '<input type="text" name="date">') def test_render_value(self): """ @@ -20,13 +20,13 @@ class DateTimeInputTest(WidgetTest): d = datetime(2007, 9, 17, 12, 51, 34, 482548) self.assertEqual(str(d), '2007-09-17 12:51:34.482548') self.check_html(self.widget, 'date', d, html=( - '<input type="text" name="date" value="2007-09-17 12:51:34" />' + '<input type="text" name="date" value="2007-09-17 12:51:34">' )) self.check_html(self.widget, 'date', datetime(2007, 9, 17, 12, 51, 34), html=( - '<input type="text" name="date" value="2007-09-17 12:51:34" />' + '<input type="text" name="date" value="2007-09-17 12:51:34">' )) self.check_html(self.widget, 'date', datetime(2007, 9, 17, 12, 51), html=( - '<input type="text" name="date" value="2007-09-17 12:51:00" />' + '<input type="text" name="date" value="2007-09-17 12:51:00">' )) def test_render_formatted(self): @@ -37,14 +37,14 @@ class DateTimeInputTest(WidgetTest): format='%d/%m/%Y %H:%M', attrs={'type': 'datetime'}, ) d = datetime(2007, 9, 17, 12, 51, 34, 482548) - self.check_html(widget, 'date', d, html='<input type="datetime" name="date" value="17/09/2007 12:51" />') + self.check_html(widget, 'date', d, html='<input type="datetime" name="date" value="17/09/2007 12:51">') @override_settings(USE_L10N=True) @translation.override('de-at') def test_l10n(self): d = datetime(2007, 9, 17, 12, 51, 34, 482548) self.check_html(self.widget, 'date', d, html=( - '<input type="text" name="date" value="17.09.2007 12:51:34" />' + '<input type="text" name="date" value="17.09.2007 12:51:34">' )) @override_settings(USE_L10N=True) @@ -54,10 +54,10 @@ class DateTimeInputTest(WidgetTest): with self.settings(USE_L10N=False): self.check_html( self.widget, 'date', d, - html='<input type="text" name="date" value="2007-09-17 12:51:34" />', + html='<input type="text" name="date" value="2007-09-17 12:51:34">', ) with translation.override('es'): self.check_html( self.widget, 'date', d, - html='<input type="text" name="date" value="17/09/2007 12:51:34" />', + html='<input type="text" name="date" value="17/09/2007 12:51:34">', ) diff --git a/tests/forms_tests/widget_tests/test_fileinput.py b/tests/forms_tests/widget_tests/test_fileinput.py index 6e96dc7b5f..bbd7c7fe52 100644 --- a/tests/forms_tests/widget_tests/test_fileinput.py +++ b/tests/forms_tests/widget_tests/test_fileinput.py @@ -11,9 +11,9 @@ class FileInputTest(WidgetTest): FileInput widgets never render the value attribute. The old value isn't useful if a form is updated or an error occurred. """ - self.check_html(self.widget, 'email', 'test@example.com', html='<input type="file" name="email" />') - self.check_html(self.widget, 'email', '', html='<input type="file" name="email" />') - self.check_html(self.widget, 'email', None, html='<input type="file" name="email" />') + self.check_html(self.widget, 'email', 'test@example.com', html='<input type="file" name="email">') + self.check_html(self.widget, 'email', '', html='<input type="file" name="email">') + self.check_html(self.widget, 'email', None, html='<input type="file" name="email">') def test_value_omitted_from_data(self): self.assertIs(self.widget.value_omitted_from_data({}, {}, 'field'), True) diff --git a/tests/forms_tests/widget_tests/test_hiddeninput.py b/tests/forms_tests/widget_tests/test_hiddeninput.py index d1604a31e4..a7d036410c 100644 --- a/tests/forms_tests/widget_tests/test_hiddeninput.py +++ b/tests/forms_tests/widget_tests/test_hiddeninput.py @@ -7,7 +7,7 @@ class HiddenInputTest(WidgetTest): widget = HiddenInput() def test_render(self): - self.check_html(self.widget, 'email', '', html='<input type="hidden" name="email" />') + self.check_html(self.widget, 'email', '', html='<input type="hidden" name="email">') def test_use_required_attribute(self): # Always False to avoid browser validation on inputs hidden from the diff --git a/tests/forms_tests/widget_tests/test_input.py b/tests/forms_tests/widget_tests/test_input.py index e773d94d8a..8be971826e 100644 --- a/tests/forms_tests/widget_tests/test_input.py +++ b/tests/forms_tests/widget_tests/test_input.py @@ -8,8 +8,8 @@ class InputTests(WidgetTest): def test_attrs_with_type(self): attrs = {'type': 'date'} widget = Input(attrs) - self.check_html(widget, 'name', 'value', '<input type="date" name="name" value="value" />') + self.check_html(widget, 'name', 'value', '<input type="date" name="name" value="value">') # reuse the same attrs for another widget - self.check_html(Input(attrs), 'name', 'value', '<input type="date" name="name" value="value" />') + self.check_html(Input(attrs), 'name', 'value', '<input type="date" name="name" value="value">') attrs['type'] = 'number' # shouldn't change the widget type - self.check_html(widget, 'name', 'value', '<input type="date" name="name" value="value" />') + self.check_html(widget, 'name', 'value', '<input type="date" name="name" value="value">') diff --git a/tests/forms_tests/widget_tests/test_multiplehiddeninput.py b/tests/forms_tests/widget_tests/test_multiplehiddeninput.py index d1c1ae6fa5..37d54174ee 100644 --- a/tests/forms_tests/widget_tests/test_multiplehiddeninput.py +++ b/tests/forms_tests/widget_tests/test_multiplehiddeninput.py @@ -9,30 +9,30 @@ class MultipleHiddenInputTest(WidgetTest): def test_render_single(self): self.check_html( self.widget, 'email', ['test@example.com'], - html='<input type="hidden" name="email" value="test@example.com" />', + html='<input type="hidden" name="email" value="test@example.com">', ) def test_render_multiple(self): self.check_html( self.widget, 'email', ['test@example.com', 'foo@example.com'], html=( - '<input type="hidden" name="email" value="test@example.com" />\n' - '<input type="hidden" name="email" value="foo@example.com" />' + '<input type="hidden" name="email" value="test@example.com">\n' + '<input type="hidden" name="email" value="foo@example.com">' ), ) def test_render_attrs(self): self.check_html( self.widget, 'email', ['test@example.com'], attrs={'class': 'fun'}, - html='<input type="hidden" name="email" value="test@example.com" class="fun" />', + html='<input type="hidden" name="email" value="test@example.com" class="fun">', ) def test_render_attrs_multiple(self): self.check_html( self.widget, 'email', ['test@example.com', 'foo@example.com'], attrs={'class': 'fun'}, html=( - '<input type="hidden" name="email" value="test@example.com" class="fun" />\n' - '<input type="hidden" name="email" value="foo@example.com" class="fun" />' + '<input type="hidden" name="email" value="test@example.com" class="fun">\n' + '<input type="hidden" name="email" value="foo@example.com" class="fun">' ), ) @@ -41,18 +41,18 @@ class MultipleHiddenInputTest(WidgetTest): self.check_html(widget, 'email', [], '') self.check_html( widget, 'email', ['foo@example.com'], - html='<input type="hidden" class="fun" value="foo@example.com" name="email" />', + html='<input type="hidden" class="fun" value="foo@example.com" name="email">', ) self.check_html( widget, 'email', ['foo@example.com', 'test@example.com'], html=( - '<input type="hidden" class="fun" value="foo@example.com" name="email" />\n' - '<input type="hidden" class="fun" value="test@example.com" name="email" />' + '<input type="hidden" class="fun" value="foo@example.com" name="email">\n' + '<input type="hidden" class="fun" value="test@example.com" name="email">' ), ) self.check_html( widget, 'email', ['foo@example.com'], attrs={'class': 'special'}, - html='<input type="hidden" class="special" value="foo@example.com" name="email" />', + html='<input type="hidden" class="special" value="foo@example.com" name="email">', ) def test_render_empty(self): @@ -68,8 +68,8 @@ class MultipleHiddenInputTest(WidgetTest): self.check_html( self.widget, 'letters', ['a', 'b', 'c'], attrs={'id': 'hideme'}, html=( - '<input type="hidden" name="letters" value="a" id="hideme_0" />\n' - '<input type="hidden" name="letters" value="b" id="hideme_1" />\n' - '<input type="hidden" name="letters" value="c" id="hideme_2" />' + '<input type="hidden" name="letters" value="a" id="hideme_0">\n' + '<input type="hidden" name="letters" value="b" id="hideme_1">\n' + '<input type="hidden" name="letters" value="c" id="hideme_2">' ), ) diff --git a/tests/forms_tests/widget_tests/test_multiwidget.py b/tests/forms_tests/widget_tests/test_multiwidget.py index bce806231d..783eb78b85 100644 --- a/tests/forms_tests/widget_tests/test_multiwidget.py +++ b/tests/forms_tests/widget_tests/test_multiwidget.py @@ -88,16 +88,16 @@ class MultiWidgetTest(WidgetTest): ) ) self.check_html(widget, 'name', ['john', 'lennon'], html=( - '<input type="text" class="big" value="john" name="name_0" />' - '<input type="text" class="small" value="lennon" name="name_1" />' + '<input type="text" class="big" value="john" name="name_0">' + '<input type="text" class="small" value="lennon" name="name_1">' )) self.check_html(widget, 'name', 'john__lennon', html=( - '<input type="text" class="big" value="john" name="name_0" />' - '<input type="text" class="small" value="lennon" name="name_1" />' + '<input type="text" class="big" value="john" name="name_0">' + '<input type="text" class="small" value="lennon" name="name_1">' )) self.check_html(widget, 'name', 'john__lennon', attrs={'id': 'foo'}, html=( - '<input id="foo_0" type="text" class="big" value="john" name="name_0" />' - '<input id="foo_1" type="text" class="small" value="lennon" name="name_1" />' + '<input id="foo_0" type="text" class="big" value="john" name="name_0">' + '<input id="foo_1" type="text" class="small" value="lennon" name="name_1">' )) def test_constructor_attrs(self): @@ -109,21 +109,21 @@ class MultiWidgetTest(WidgetTest): attrs={'id': 'bar'}, ) self.check_html(widget, 'name', ['john', 'lennon'], html=( - '<input id="bar_0" type="text" class="big" value="john" name="name_0" />' - '<input id="bar_1" type="text" class="small" value="lennon" name="name_1" />' + '<input id="bar_0" type="text" class="big" value="john" name="name_0">' + '<input id="bar_1" type="text" class="small" value="lennon" name="name_1">' )) def test_constructor_attrs_with_type(self): attrs = {'type': 'number'} widget = MyMultiWidget(widgets=(TextInput, TextInput()), attrs=attrs) self.check_html(widget, 'code', ['1', '2'], html=( - '<input type="number" value="1" name="code_0" />' - '<input type="number" value="2" name="code_1" />' + '<input type="number" value="1" name="code_0">' + '<input type="number" value="2" name="code_1">' )) widget = MyMultiWidget(widgets=(TextInput(attrs), TextInput(attrs)), attrs={'class': 'bar'}) self.check_html(widget, 'code', ['1', '2'], html=( - '<input type="number" value="1" name="code_0" class="bar" />' - '<input type="number" value="2" name="code_1" class="bar" />' + '<input type="number" value="1" name="code_0" class="bar">' + '<input type="number" value="2" name="code_1" class="bar">' )) def test_value_omitted_from_data(self): @@ -154,23 +154,23 @@ class MultiWidgetTest(WidgetTest): widget = ComplexMultiWidget() self.check_html(widget, 'name', 'some text,JP,2007-04-25 06:24:00', html=( """ - <input type="text" name="name_0" value="some text" /> + <input type="text" name="name_0" value="some text"> <select multiple name="name_1"> <option value="J" selected>John</option> <option value="P" selected>Paul</option> <option value="G">George</option> <option value="R">Ringo</option> </select> - <input type="text" name="name_2_0" value="2007-04-25" /> - <input type="text" name="name_2_1" value="06:24:00" /> + <input type="text" name="name_2_0" value="2007-04-25"> + <input type="text" name="name_2_1" value="06:24:00"> """ )) def test_no_whitespace_between_widgets(self): widget = MyMultiWidget(widgets=(TextInput, TextInput())) self.check_html(widget, 'code', None, html=( - '<input type="text" name="code_0" />' - '<input type="text" name="code_1" />' + '<input type="text" name="code_0">' + '<input type="text" name="code_1">' ), strict=True) def test_deepcopy(self): diff --git a/tests/forms_tests/widget_tests/test_numberinput.py b/tests/forms_tests/widget_tests/test_numberinput.py index 95a0a9250a..40bd94df6e 100644 --- a/tests/forms_tests/widget_tests/test_numberinput.py +++ b/tests/forms_tests/widget_tests/test_numberinput.py @@ -11,5 +11,5 @@ class NumberInputTests(WidgetTest): widget = NumberInput(attrs={'max': 12345, 'min': 1234, 'step': 9999}) self.check_html( widget, 'name', 'value', - '<input type="number" name="name" value="value" max="12345" min="1234" step="9999" />' + '<input type="number" name="name" value="value" max="12345" min="1234" step="9999">' ) diff --git a/tests/forms_tests/widget_tests/test_passwordinput.py b/tests/forms_tests/widget_tests/test_passwordinput.py index 4cb7c4ef47..ecbe274d69 100644 --- a/tests/forms_tests/widget_tests/test_passwordinput.py +++ b/tests/forms_tests/widget_tests/test_passwordinput.py @@ -7,10 +7,10 @@ class PasswordInputTest(WidgetTest): widget = PasswordInput() def test_render(self): - self.check_html(self.widget, 'password', '', html='<input type="password" name="password" />') + self.check_html(self.widget, 'password', '', html='<input type="password" name="password">') def test_render_ignore_value(self): - self.check_html(self.widget, 'password', 'secret', html='<input type="password" name="password" />') + self.check_html(self.widget, 'password', 'secret', html='<input type="password" name="password">') def test_render_value_true(self): """ @@ -18,9 +18,9 @@ class PasswordInputTest(WidgetTest): render its value. For security reasons, this is off by default. """ widget = PasswordInput(render_value=True) - self.check_html(widget, 'password', '', html='<input type="password" name="password" />') - self.check_html(widget, 'password', None, html='<input type="password" name="password" />') + self.check_html(widget, 'password', '', html='<input type="password" name="password">') + self.check_html(widget, 'password', None, html='<input type="password" name="password">') self.check_html( widget, 'password', 'test@example.com', - html='<input type="password" name="password" value="test@example.com" />', + html='<input type="password" name="password" value="test@example.com">', ) diff --git a/tests/forms_tests/widget_tests/test_radioselect.py b/tests/forms_tests/widget_tests/test_radioselect.py index 05f980eb36..d0a70c7953 100644 --- a/tests/forms_tests/widget_tests/test_radioselect.py +++ b/tests/forms_tests/widget_tests/test_radioselect.py @@ -13,11 +13,11 @@ class RadioSelectTest(WidgetTest): choices = (('', '------'),) + self.beatles self.check_html(self.widget(choices=choices), 'beatle', 'J', html=( """<ul> - <li><label><input type="radio" name="beatle" value="" /> ------</label></li> - <li><label><input checked type="radio" name="beatle" value="J" /> John</label></li> - <li><label><input type="radio" name="beatle" value="P" /> Paul</label></li> - <li><label><input type="radio" name="beatle" value="G" /> George</label></li> - <li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li> + <li><label><input type="radio" name="beatle" value=""> ------</label></li> + <li><label><input checked type="radio" name="beatle" value="J"> John</label></li> + <li><label><input type="radio" name="beatle" value="P"> Paul</label></li> + <li><label><input type="radio" name="beatle" value="G"> George</label></li> + <li><label><input type="radio" name="beatle" value="R"> Ringo</label></li> </ul>""" )) @@ -30,19 +30,19 @@ class RadioSelectTest(WidgetTest): html = """ <ul id="media"> <li> - <label for="media_0"><input id="media_0" name="nestchoice" type="radio" value="unknown" /> Unknown</label> + <label for="media_0"><input id="media_0" name="nestchoice" type="radio" value="unknown"> Unknown</label> </li> <li>Audio<ul id="media_1"> <li> - <label for="media_1_0"><input id="media_1_0" name="nestchoice" type="radio" value="vinyl" /> Vinyl</label> + <label for="media_1_0"><input id="media_1_0" name="nestchoice" type="radio" value="vinyl"> Vinyl</label> </li> - <li><label for="media_1_1"><input id="media_1_1" name="nestchoice" type="radio" value="cd" /> CD</label></li> + <li><label for="media_1_1"><input id="media_1_1" name="nestchoice" type="radio" value="cd"> CD</label></li> </ul></li> <li>Video<ul id="media_2"> - <li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="radio" value="vhs" /> VHS</label></li> + <li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="radio" value="vhs"> VHS</label></li> <li> <label for="media_2_1"> - <input checked id="media_2_1" name="nestchoice" type="radio" value="dvd" /> DVD + <input checked id="media_2_1" name="nestchoice" type="radio" value="dvd"> DVD </label> </li> </ul></li> @@ -62,11 +62,11 @@ class RadioSelectTest(WidgetTest): html = """ <ul id="foo"> <li> - <label for="foo_0"><input checked type="radio" id="foo_0" value="J" name="beatle" /> John</label> + <label for="foo_0"><input checked type="radio" id="foo_0" value="J" name="beatle"> John</label> </li> - <li><label for="foo_1"><input type="radio" id="foo_1" value="P" name="beatle" /> Paul</label></li> - <li><label for="foo_2"><input type="radio" id="foo_2" value="G" name="beatle" /> George</label></li> - <li><label for="foo_3"><input type="radio" id="foo_3" value="R" name="beatle" /> Ringo</label></li> + <li><label for="foo_1"><input type="radio" id="foo_1" value="P" name="beatle"> Paul</label></li> + <li><label for="foo_2"><input type="radio" id="foo_2" value="G" name="beatle"> George</label></li> + <li><label for="foo_3"><input type="radio" id="foo_3" value="R" name="beatle"> Ringo</label></li> </ul> """ self.check_html(widget, 'beatle', 'J', html=html) @@ -79,11 +79,11 @@ class RadioSelectTest(WidgetTest): html = """ <ul id="bar"> <li> - <label for="bar_0"><input checked type="radio" id="bar_0" value="J" name="beatle" /> John</label> + <label for="bar_0"><input checked type="radio" id="bar_0" value="J" name="beatle"> John</label> </li> - <li><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></li> - <li><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></li> - <li><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle" /> Ringo</label></li> + <li><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle"> Paul</label></li> + <li><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle"> George</label></li> + <li><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle"> Ringo</label></li> </ul> """ self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', attrs={'id': 'bar'}, html=html) @@ -95,10 +95,10 @@ class RadioSelectTest(WidgetTest): """ html = """ <ul class="bar"> - <li><label><input checked type="radio" class="bar" value="J" name="beatle" /> John</label></li> - <li><label><input type="radio" class="bar" value="P" name="beatle" /> Paul</label></li> - <li><label><input type="radio" class="bar" value="G" name="beatle" /> George</label></li> - <li><label><input type="radio" class="bar" value="R" name="beatle" /> Ringo</label></li> + <li><label><input checked type="radio" class="bar" value="J" name="beatle"> John</label></li> + <li><label><input type="radio" class="bar" value="P" name="beatle"> Paul</label></li> + <li><label><input type="radio" class="bar" value="G" name="beatle"> George</label></li> + <li><label><input type="radio" class="bar" value="R" name="beatle"> Ringo</label></li> </ul> """ self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', attrs={'class': 'bar'}, html=html) @@ -112,9 +112,9 @@ class RadioSelectTest(WidgetTest): ] html = """ <ul> - <li><label><input type="radio" name="number" value="1" /> One</label></li> - <li><label><input type="radio" name="number" value="1000" /> One thousand</label></li> - <li><label><input type="radio" name="number" value="1000000" /> One million</label></li> + <li><label><input type="radio" name="number" value="1"> One</label></li> + <li><label><input type="radio" name="number" value="1000"> One thousand</label></li> + <li><label><input type="radio" name="number" value="1000000"> One million</label></li> </ul> """ self.check_html(self.widget(choices=choices), 'number', None, html=html) @@ -125,8 +125,8 @@ class RadioSelectTest(WidgetTest): ] html = """ <ul> - <li><label><input type="radio" name="time" value="00:00:00" /> midnight</label></li> - <li><label><input type="radio" name="time" value="12:00:00" /> noon</label></li> + <li><label><input type="radio" name="time" value="00:00:00"> midnight</label></li> + <li><label><input type="radio" name="time" value="12:00:00"> noon</label></li> </ul> """ self.check_html(self.widget(choices=choices), 'time', None, html=html) diff --git a/tests/forms_tests/widget_tests/test_splitdatetimewidget.py b/tests/forms_tests/widget_tests/test_splitdatetimewidget.py index 3b06fd5958..ebb30da148 100644 --- a/tests/forms_tests/widget_tests/test_splitdatetimewidget.py +++ b/tests/forms_tests/widget_tests/test_splitdatetimewidget.py @@ -10,37 +10,37 @@ class SplitDateTimeWidgetTest(WidgetTest): def test_render_empty(self): self.check_html(self.widget, 'date', '', html=( - '<input type="text" name="date_0" /><input type="text" name="date_1" />' + '<input type="text" name="date_0"><input type="text" name="date_1">' )) def test_render_none(self): self.check_html(self.widget, 'date', None, html=( - '<input type="text" name="date_0" /><input type="text" name="date_1" />' + '<input type="text" name="date_0"><input type="text" name="date_1">' )) def test_render_datetime(self): self.check_html(self.widget, 'date', datetime(2006, 1, 10, 7, 30), html=( - '<input type="text" name="date_0" value="2006-01-10" />' - '<input type="text" name="date_1" value="07:30:00" />' + '<input type="text" name="date_0" value="2006-01-10">' + '<input type="text" name="date_1" value="07:30:00">' )) def test_render_date_and_time(self): self.check_html(self.widget, 'date', [date(2006, 1, 10), time(7, 30)], html=( - '<input type="text" name="date_0" value="2006-01-10" />' - '<input type="text" name="date_1" value="07:30:00" />' + '<input type="text" name="date_0" value="2006-01-10">' + '<input type="text" name="date_1" value="07:30:00">' )) def test_constructor_attrs(self): widget = SplitDateTimeWidget(attrs={'class': 'pretty'}) self.check_html(widget, 'date', datetime(2006, 1, 10, 7, 30), html=( - '<input type="text" class="pretty" value="2006-01-10" name="date_0" />' - '<input type="text" class="pretty" value="07:30:00" name="date_1" />' + '<input type="text" class="pretty" value="2006-01-10" name="date_0">' + '<input type="text" class="pretty" value="07:30:00" name="date_1">' )) def test_constructor_different_attrs(self): html = ( - '<input type="text" class="foo" value="2006-01-10" name="date_0" />' - '<input type="text" class="bar" value="07:30:00" name="date_1" />' + '<input type="text" class="foo" value="2006-01-10" name="date_0">' + '<input type="text" class="bar" value="07:30:00" name="date_1">' ) widget = SplitDateTimeWidget(date_attrs={'class': 'foo'}, time_attrs={'class': 'bar'}) self.check_html(widget, 'date', datetime(2006, 1, 10, 7, 30), html=html) @@ -58,6 +58,6 @@ class SplitDateTimeWidgetTest(WidgetTest): date_format='%d/%m/%Y', time_format='%H:%M', ) self.check_html(widget, 'date', datetime(2006, 1, 10, 7, 30), html=( - '<input type="text" name="date_0" value="10/01/2006" />' - '<input type="text" name="date_1" value="07:30" />' + '<input type="text" name="date_0" value="10/01/2006">' + '<input type="text" name="date_1" value="07:30">' )) diff --git a/tests/forms_tests/widget_tests/test_splithiddendatetimewidget.py b/tests/forms_tests/widget_tests/test_splithiddendatetimewidget.py index e3adb11520..dff28161a5 100644 --- a/tests/forms_tests/widget_tests/test_splithiddendatetimewidget.py +++ b/tests/forms_tests/widget_tests/test_splithiddendatetimewidget.py @@ -12,22 +12,22 @@ class SplitHiddenDateTimeWidgetTest(WidgetTest): def test_render_empty(self): self.check_html(self.widget, 'date', '', html=( - '<input type="hidden" name="date_0" /><input type="hidden" name="date_1" />' + '<input type="hidden" name="date_0"><input type="hidden" name="date_1">' )) def test_render_value(self): d = datetime(2007, 9, 17, 12, 51, 34, 482548) self.check_html(self.widget, 'date', d, html=( - '<input type="hidden" name="date_0" value="2007-09-17" />' - '<input type="hidden" name="date_1" value="12:51:34" />' + '<input type="hidden" name="date_0" value="2007-09-17">' + '<input type="hidden" name="date_1" value="12:51:34">' )) self.check_html(self.widget, 'date', datetime(2007, 9, 17, 12, 51, 34), html=( - '<input type="hidden" name="date_0" value="2007-09-17" />' - '<input type="hidden" name="date_1" value="12:51:34" />' + '<input type="hidden" name="date_0" value="2007-09-17">' + '<input type="hidden" name="date_1" value="12:51:34">' )) self.check_html(self.widget, 'date', datetime(2007, 9, 17, 12, 51), html=( - '<input type="hidden" name="date_0" value="2007-09-17" />' - '<input type="hidden" name="date_1" value="12:51:00" />' + '<input type="hidden" name="date_0" value="2007-09-17">' + '<input type="hidden" name="date_1" value="12:51:00">' )) @override_settings(USE_L10N=True) @@ -36,15 +36,15 @@ class SplitHiddenDateTimeWidgetTest(WidgetTest): d = datetime(2007, 9, 17, 12, 51) self.check_html(self.widget, 'date', d, html=( """ - <input type="hidden" name="date_0" value="17.09.2007" /> - <input type="hidden" name="date_1" value="12:51:00" /> + <input type="hidden" name="date_0" value="17.09.2007"> + <input type="hidden" name="date_1" value="12:51:00"> """ )) def test_constructor_different_attrs(self): html = ( - '<input type="hidden" class="foo" value="2006-01-10" name="date_0" />' - '<input type="hidden" class="bar" value="07:30:00" name="date_1" />' + '<input type="hidden" class="foo" value="2006-01-10" name="date_0">' + '<input type="hidden" class="bar" value="07:30:00" name="date_1">' ) widget = SplitHiddenDateTimeWidget(date_attrs={'class': 'foo'}, time_attrs={'class': 'bar'}) self.check_html(widget, 'date', datetime(2006, 1, 10, 7, 30), html=html) diff --git a/tests/forms_tests/widget_tests/test_textinput.py b/tests/forms_tests/widget_tests/test_textinput.py index 906687d971..260e86f740 100644 --- a/tests/forms_tests/widget_tests/test_textinput.py +++ b/tests/forms_tests/widget_tests/test_textinput.py @@ -8,14 +8,14 @@ class TextInputTest(WidgetTest): widget = TextInput() def test_render(self): - self.check_html(self.widget, 'email', '', html='<input type="text" name="email" />') + self.check_html(self.widget, 'email', '', html='<input type="text" name="email">') def test_render_none(self): - self.check_html(self.widget, 'email', None, html='<input type="text" name="email" />') + self.check_html(self.widget, 'email', None, html='<input type="text" name="email">') def test_render_value(self): self.check_html(self.widget, 'email', 'test@example.com', html=( - '<input type="text" name="email" value="test@example.com" />' + '<input type="text" name="email" value="test@example.com">' )) def test_render_boolean(self): @@ -24,22 +24,22 @@ class TextInputTest(WidgetTest): "False"). """ self.check_html(self.widget, 'get_spam', False, html=( - '<input type="text" name="get_spam" value="False" />' + '<input type="text" name="get_spam" value="False">' )) self.check_html(self.widget, 'get_spam', True, html=( - '<input type="text" name="get_spam" value="True" />' + '<input type="text" name="get_spam" value="True">' )) def test_render_quoted(self): self.check_html( self.widget, 'email', 'some "quoted" & ampersanded value', - html='<input type="text" name="email" value="some "quoted" & ampersanded value" />', + html='<input type="text" name="email" value="some "quoted" & ampersanded value">', ) def test_render_custom_attrs(self): self.check_html( self.widget, 'email', 'test@example.com', attrs={'class': 'fun'}, - html='<input type="text" name="email" value="test@example.com" class="fun" />', + html='<input type="text" name="email" value="test@example.com" class="fun">', ) def test_render_unicode(self): @@ -47,16 +47,16 @@ class TextInputTest(WidgetTest): self.widget, 'email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}, html=( '<input type="text" name="email" ' - 'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun" />' + 'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun">' ), ) def test_constructor_attrs(self): widget = TextInput(attrs={'class': 'fun', 'type': 'email'}) - self.check_html(widget, 'email', '', html='<input type="email" class="fun" name="email" />') + self.check_html(widget, 'email', '', html='<input type="email" class="fun" name="email">') self.check_html( widget, 'email', 'foo@example.com', - html='<input type="email" class="fun" value="foo@example.com" name="email" />', + html='<input type="email" class="fun" value="foo@example.com" name="email">', ) def test_attrs_precedence(self): @@ -67,12 +67,12 @@ class TextInputTest(WidgetTest): widget = TextInput(attrs={'class': 'pretty'}) self.check_html( widget, 'email', '', attrs={'class': 'special'}, - html='<input type="text" class="special" name="email" />', + html='<input type="text" class="special" name="email">', ) def test_attrs_safestring(self): widget = TextInput(attrs={'onBlur': mark_safe("function('foo')")}) - self.check_html(widget, 'email', '', html='<input onBlur="function(\'foo\')" type="text" name="email" />') + self.check_html(widget, 'email', '', html='<input onBlur="function(\'foo\')" type="text" name="email">') def test_use_required_attribute(self): # Text inputs can safely trigger the browser validation. diff --git a/tests/forms_tests/widget_tests/test_timeinput.py b/tests/forms_tests/widget_tests/test_timeinput.py index ab355e2ec9..1a511e4cab 100644 --- a/tests/forms_tests/widget_tests/test_timeinput.py +++ b/tests/forms_tests/widget_tests/test_timeinput.py @@ -11,7 +11,7 @@ class TimeInputTest(WidgetTest): widget = TimeInput() def test_render_none(self): - self.check_html(self.widget, 'time', None, html='<input type="text" name="time" />') + self.check_html(self.widget, 'time', None, html='<input type="text" name="time">') def test_render_value(self): """ @@ -19,18 +19,18 @@ class TimeInputTest(WidgetTest): """ t = time(12, 51, 34, 482548) self.assertEqual(str(t), '12:51:34.482548') - self.check_html(self.widget, 'time', t, html='<input type="text" name="time" value="12:51:34" />') + self.check_html(self.widget, 'time', t, html='<input type="text" name="time" value="12:51:34">') self.check_html(self.widget, 'time', time(12, 51, 34), html=( - '<input type="text" name="time" value="12:51:34" />' + '<input type="text" name="time" value="12:51:34">' )) self.check_html(self.widget, 'time', time(12, 51), html=( - '<input type="text" name="time" value="12:51:00" />' + '<input type="text" name="time" value="12:51:00">' )) def test_string(self): """Initializing from a string value.""" self.check_html(self.widget, 'time', '13:12:11', html=( - '<input type="text" name="time" value="13:12:11" />' + '<input type="text" name="time" value="13:12:11">' )) def test_format(self): @@ -39,10 +39,10 @@ class TimeInputTest(WidgetTest): """ t = time(12, 51, 34, 482548) widget = TimeInput(format='%H:%M', attrs={'type': 'time'}) - self.check_html(widget, 'time', t, html='<input type="time" name="time" value="12:51" />') + self.check_html(widget, 'time', t, html='<input type="time" name="time" value="12:51">') @override_settings(USE_L10N=True) @translation.override('de-at') def test_l10n(self): t = time(12, 51, 34, 482548) - self.check_html(self.widget, 'time', t, html='<input type="text" name="time" value="12:51:34" />') + self.check_html(self.widget, 'time', t, html='<input type="text" name="time" value="12:51:34">') diff --git a/tests/forms_tests/widget_tests/test_widget.py b/tests/forms_tests/widget_tests/test_widget.py index f25fe1e5fe..8cde388b8f 100644 --- a/tests/forms_tests/widget_tests/test_widget.py +++ b/tests/forms_tests/widget_tests/test_widget.py @@ -19,8 +19,8 @@ class WidgetTests(WidgetTest): self.assertIs(widget.value_omitted_from_data({'field': 'value'}, {}, 'field'), False) def test_no_trailing_newline_in_attrs(self): - self.check_html(Input(), 'name', 'value', strict=True, html='<input type="None" name="name" value="value" />') + self.check_html(Input(), 'name', 'value', strict=True, html='<input type="None" name="name" value="value">') def test_attr_false_not_rendered(self): - html = '<input type="None" name="name" value="value" />' + html = '<input type="None" name="name" value="value">' self.check_html(Input(), 'name', 'value', html=html, attrs={'readonly': False}) diff --git a/tests/generic_relations/test_forms.py b/tests/generic_relations/test_forms.py index 99ae882693..4b94f24531 100644 --- a/tests/generic_relations/test_forms.py +++ b/tests/generic_relations/test_forms.py @@ -30,24 +30,24 @@ class GenericInlineFormsetTests(TestCase): ''.join(form.as_p() for form in formset.forms), """<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag"> Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-0-tag" type="text" -name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50" /></p> +name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50"></p> <p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label> <input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE" -id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" /> +id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE"> <input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id" -id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>""" +id="id_generic_relations-taggeditem-content_type-object_id-0-id"></p>""" ) formset = GenericFormSet(instance=Animal()) self.assertHTMLEqual( ''.join(form.as_p() for form in formset.forms), """<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag"> Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-0-tag" -type="text" name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50" /></p> +type="text" name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50"></p> <p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label> <input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE" -id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" /><input type="hidden" +id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE"><input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id" -id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>""" +id="id_generic_relations-taggeditem-content_type-object_id-0-id"></p>""" ) platypus = Animal.objects.create( common_name='Platypus', latin_name='Ornithorhynchus anatinus', @@ -60,29 +60,29 @@ id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>""" ''.join(form.as_p() for form in formset.forms), """<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag">Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-0-tag" type="text" -name="generic_relations-taggeditem-content_type-object_id-0-tag" value="shiny" maxlength="50" /></p> +name="generic_relations-taggeditem-content_type-object_id-0-tag" value="shiny" maxlength="50"></p> <p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label> <input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE" -id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" /> +id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE"> <input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id" -value="%s" id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p> +value="%s" id="id_generic_relations-taggeditem-content_type-object_id-0-id"></p> <p><label for="id_generic_relations-taggeditem-content_type-object_id-1-tag">Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-1-tag" type="text" -name="generic_relations-taggeditem-content_type-object_id-1-tag" maxlength="50" /></p> +name="generic_relations-taggeditem-content_type-object_id-1-tag" maxlength="50"></p> <p><label for="id_generic_relations-taggeditem-content_type-object_id-1-DELETE">Delete:</label> <input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-1-DELETE" -id="id_generic_relations-taggeditem-content_type-object_id-1-DELETE" /> +id="id_generic_relations-taggeditem-content_type-object_id-1-DELETE"> <input type="hidden" name="generic_relations-taggeditem-content_type-object_id-1-id" -id="id_generic_relations-taggeditem-content_type-object_id-1-id" /></p>""" % tagged_item_id +id="id_generic_relations-taggeditem-content_type-object_id-1-id"></p>""" % tagged_item_id ) lion = Animal.objects.create(common_name='Lion', latin_name='Panthera leo') formset = GenericFormSet(instance=lion, prefix='x') self.assertHTMLEqual( ''.join(form.as_p() for form in formset.forms), """<p><label for="id_x-0-tag">Tag:</label> -<input id="id_x-0-tag" type="text" name="x-0-tag" maxlength="50" /></p> -<p><label for="id_x-0-DELETE">Delete:</label> <input type="checkbox" name="x-0-DELETE" id="id_x-0-DELETE" /> -<input type="hidden" name="x-0-id" id="id_x-0-id" /></p>""" +<input id="id_x-0-tag" type="text" name="x-0-tag" maxlength="50"></p> +<p><label for="id_x-0-DELETE">Delete:</label> <input type="checkbox" name="x-0-DELETE" id="id_x-0-DELETE"> +<input type="hidden" name="x-0-id" id="id_x-0-id"></p>""" ) def test_options(self): @@ -101,7 +101,7 @@ id="id_generic_relations-taggeditem-content_type-object_id-1-id" /></p>""" % tag self.assertHTMLEqual( formset.forms[0].as_p(), '<input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id" value="%s" ' - 'id="id_generic_relations-taggeditem-content_type-object_id-0-id" />' % harmless.pk + 'id="id_generic_relations-taggeditem-content_type-object_id-0-id">' % harmless.pk ) self.assertEqual(formset.forms[0].instance, harmless) self.assertEqual(formset.forms[1].instance, mammal) diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 5fb710faf8..8eedf09d68 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -909,13 +909,13 @@ class FormattingTests(SimpleTestCase): self.assertHTMLEqual( form6.as_ul(), '<li><label for="id_name">Name:</label>' - '<input id="id_name" type="text" name="name" value="acme" maxlength="50" required /></li>' + '<input id="id_name" type="text" name="name" value="acme" maxlength="50" required></li>' '<li><label for="id_date_added">Date added:</label>' - '<input type="text" name="date_added" value="31.12.2009 06:00:00" id="id_date_added" required /></li>' + '<input type="text" name="date_added" value="31.12.2009 06:00:00" id="id_date_added" required></li>' '<li><label for="id_cents_paid">Cents paid:</label>' - '<input type="text" name="cents_paid" value="59,47" id="id_cents_paid" required /></li>' + '<input type="text" name="cents_paid" value="59,47" id="id_cents_paid" required></li>' '<li><label for="id_products_delivered">Products delivered:</label>' - '<input type="text" name="products_delivered" value="12000" id="id_products_delivered" required />' + '<input type="text" name="products_delivered" value="12000" id="id_products_delivered" required>' '</li>' ) self.assertEqual(localize_input(datetime.datetime(2009, 12, 31, 6, 0, 0)), '31.12.2009 06:00:00') @@ -924,7 +924,7 @@ class FormattingTests(SimpleTestCase): # Checking for the localized "products_delivered" field self.assertInHTML( '<input type="text" name="products_delivered" ' - 'value="12.000" id="id_products_delivered" required />', + 'value="12.000" id="id_products_delivered" required>', form6.as_ul() ) @@ -1073,18 +1073,18 @@ class FormattingTests(SimpleTestCase): self.assertHTMLEqual( template.render(context), - '<input id="id_date_added" name="date_added" type="text" value="31.12.2009 06:00:00" required />;' - '<input id="id_cents_paid" name="cents_paid" type="text" value="59,47" required />' + '<input id="id_date_added" name="date_added" type="text" value="31.12.2009 06:00:00" required>;' + '<input id="id_cents_paid" name="cents_paid" type="text" value="59,47" required>' ) self.assertHTMLEqual( template_as_text.render(context), - '<input id="id_date_added" name="date_added" type="text" value="31.12.2009 06:00:00" required />;' - ' <input id="id_cents_paid" name="cents_paid" type="text" value="59,47" required />' + '<input id="id_date_added" name="date_added" type="text" value="31.12.2009 06:00:00" required>;' + ' <input id="id_cents_paid" name="cents_paid" type="text" value="59,47" required>' ) self.assertHTMLEqual( template_as_hidden.render(context), - '<input id="id_date_added" name="date_added" type="hidden" value="31.12.2009 06:00:00" />;' - '<input id="id_cents_paid" name="cents_paid" type="hidden" value="59,47" />' + '<input id="id_date_added" name="date_added" type="hidden" value="31.12.2009 06:00:00">;' + '<input id="id_cents_paid" name="cents_paid" type="hidden" value="59,47">' ) def test_format_arbitrary_settings(self): diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py index b6ce55cf40..406a137d80 100644 --- a/tests/model_forms/tests.py +++ b/tests/model_forms/tests.py @@ -536,11 +536,11 @@ class ModelFormBaseTest(TestCase): self.assertHTMLEqual( str(SubclassMeta()), """<tr><th><label for="id_name">Name:</label></th> -<td><input id="id_name" type="text" name="name" maxlength="20" required /></td></tr> +<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr> <tr><th><label for="id_slug">Slug:</label></th> -<td><input id="id_slug" type="text" name="slug" maxlength="20" required /></td></tr> +<td><input id="id_slug" type="text" name="slug" maxlength="20" required></td></tr> <tr><th><label for="id_checkbox">Checkbox:</label></th> -<td><input type="checkbox" name="checkbox" id="id_checkbox" required /></td></tr>""" +<td><input type="checkbox" name="checkbox" id="id_checkbox" required></td></tr>""" ) def test_orderfields_form(self): @@ -554,9 +554,9 @@ class ModelFormBaseTest(TestCase): self.assertHTMLEqual( str(OrderFields()), """<tr><th><label for="id_url">The URL:</label></th> -<td><input id="id_url" type="text" name="url" maxlength="40" required /></td></tr> +<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr> <tr><th><label for="id_name">Name:</label></th> -<td><input id="id_name" type="text" name="name" maxlength="20" required /></td></tr>""" +<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr>""" ) def test_orderfields2_form(self): @@ -742,11 +742,11 @@ class TestFieldOverridesByFormMeta(SimpleTestCase): ) self.assertHTMLEqual( str(form['url']), - '<input id="id_url" type="text" class="url" name="url" maxlength="40" required />', + '<input id="id_url" type="text" class="url" name="url" maxlength="40" required>', ) self.assertHTMLEqual( str(form['slug']), - '<input id="id_slug" type="text" name="slug" maxlength="20" required />', + '<input id="id_slug" type="text" name="slug" maxlength="20" required>', ) def test_label_overrides(self): @@ -1123,29 +1123,29 @@ class ModelFormBasicTests(TestCase): self.assertHTMLEqual( str(f), """<tr><th><label for="id_name">Name:</label></th> -<td><input id="id_name" type="text" name="name" maxlength="20" required /></td></tr> +<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr> <tr><th><label for="id_slug">Slug:</label></th> -<td><input id="id_slug" type="text" name="slug" maxlength="20" required /></td></tr> +<td><input id="id_slug" type="text" name="slug" maxlength="20" required></td></tr> <tr><th><label for="id_url">The URL:</label></th> -<td><input id="id_url" type="text" name="url" maxlength="40" required /></td></tr>""" +<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr>""" ) self.assertHTMLEqual( str(f.as_ul()), - """<li><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="20" required /></li> -<li><label for="id_slug">Slug:</label> <input id="id_slug" type="text" name="slug" maxlength="20" required /></li> -<li><label for="id_url">The URL:</label> <input id="id_url" type="text" name="url" maxlength="40" required /></li>""" + """<li><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="20" required></li> +<li><label for="id_slug">Slug:</label> <input id="id_slug" type="text" name="slug" maxlength="20" required></li> +<li><label for="id_url">The URL:</label> <input id="id_url" type="text" name="url" maxlength="40" required></li>""" ) self.assertHTMLEqual( str(f["name"]), - """<input id="id_name" type="text" name="name" maxlength="20" required />""") + """<input id="id_name" type="text" name="name" maxlength="20" required>""") def test_auto_id(self): f = BaseCategoryForm(auto_id=False) self.assertHTMLEqual( str(f.as_ul()), - """<li>Name: <input type="text" name="name" maxlength="20" required /></li> -<li>Slug: <input type="text" name="slug" maxlength="20" required /></li> -<li>The URL: <input type="text" name="url" maxlength="40" required /></li>""" + """<li>Name: <input type="text" name="name" maxlength="20" required></li> +<li>Slug: <input type="text" name="slug" maxlength="20" required></li> +<li>The URL: <input type="text" name="url" maxlength="40" required></li>""" ) def test_initial_values(self): @@ -1159,9 +1159,9 @@ class ModelFormBasicTests(TestCase): }) self.assertHTMLEqual( f.as_ul(), - '''<li>Headline: <input type="text" name="headline" value="Your headline here" maxlength="50" required /></li> -<li>Slug: <input type="text" name="slug" maxlength="50" required /></li> -<li>Pub date: <input type="text" name="pub_date" required /></li> + '''<li>Headline: <input type="text" name="headline" value="Your headline here" maxlength="50" required></li> +<li>Slug: <input type="text" name="slug" maxlength="50" required></li> +<li>Pub date: <input type="text" name="pub_date" required></li> <li>Writer: <select name="writer" required> <option value="" selected>---------</option> <option value="%s">Bob Woodward</option> @@ -1185,7 +1185,7 @@ class ModelFormBasicTests(TestCase): f = RoykoForm(auto_id=False, instance=self.w_royko) self.assertHTMLEqual( str(f), - '''<tr><th>Name:</th><td><input type="text" name="name" value="Mike Royko" maxlength="50" required /><br /> + '''<tr><th>Name:</th><td><input type="text" name="name" value="Mike Royko" maxlength="50" required><br> <span class="helptext">Use both first and last names.</span></td></tr>''' ) @@ -1201,9 +1201,9 @@ class ModelFormBasicTests(TestCase): f = ArticleForm(auto_id=False, instance=art) self.assertHTMLEqual( f.as_ul(), - '''<li>Headline: <input type="text" name="headline" value="Test article" maxlength="50" required /></li> -<li>Slug: <input type="text" name="slug" value="test-article" maxlength="50" required /></li> -<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required /></li> + '''<li>Headline: <input type="text" name="headline" value="Test article" maxlength="50" required></li> +<li>Slug: <input type="text" name="slug" value="test-article" maxlength="50" required></li> +<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required></li> <li>Writer: <select name="writer" required> <option value="">---------</option> <option value="%s">Bob Woodward</option> @@ -1256,7 +1256,7 @@ class ModelFormBasicTests(TestCase): self.assertHTMLEqual( form.as_ul(), """<li><label for="id_headline">Headline:</label> -<input id="id_headline" type="text" name="headline" maxlength="50" required /></li> +<input id="id_headline" type="text" name="headline" maxlength="50" required></li> <li><label for="id_categories">Categories:</label> <select multiple name="categories" id="id_categories"> <option value="%d" selected>Entertainment</option> @@ -1318,9 +1318,9 @@ class ModelFormBasicTests(TestCase): f = ArticleForm(auto_id=False) self.assertHTMLEqual( str(f), - '''<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" required /></td></tr> -<tr><th>Slug:</th><td><input type="text" name="slug" maxlength="50" required /></td></tr> -<tr><th>Pub date:</th><td><input type="text" name="pub_date" required /></td></tr> + '''<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" required></td></tr> +<tr><th>Slug:</th><td><input type="text" name="slug" maxlength="50" required></td></tr> +<tr><th>Pub date:</th><td><input type="text" name="pub_date" required></td></tr> <tr><th>Writer:</th><td><select name="writer" required> <option value="" selected>---------</option> <option value="%s">Bob Woodward</option> @@ -1348,9 +1348,9 @@ class ModelFormBasicTests(TestCase): f = ArticleForm(auto_id=False, instance=new_art) self.assertHTMLEqual( f.as_ul(), - '''<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" required /></li> -<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" required /></li> -<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required /></li> + '''<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" required></li> +<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" required></li> +<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required></li> <li>Writer: <select name="writer" required> <option value="">---------</option> <option value="%s">Bob Woodward</option> @@ -1384,8 +1384,8 @@ class ModelFormBasicTests(TestCase): f = PartialArticleForm(auto_id=False) self.assertHTMLEqual( str(f), - '''<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" required /></td></tr> -<tr><th>Pub date:</th><td><input type="text" name="pub_date" required /></td></tr>''') + '''<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" required></td></tr> +<tr><th>Pub date:</th><td><input type="text" name="pub_date" required></td></tr>''') class PartialArticleFormWithSlug(forms.ModelForm): class Meta: @@ -1403,9 +1403,9 @@ class ModelFormBasicTests(TestCase): }, auto_id=False, instance=art) self.assertHTMLEqual( f.as_ul(), - '''<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" required /></li> -<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" required /></li> -<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required /></li>''' + '''<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" required></li> +<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" required></li> +<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required></li>''' ) self.assertTrue(f.is_valid()) new_art = f.save() @@ -1492,9 +1492,9 @@ class ModelFormBasicTests(TestCase): f = ArticleForm(auto_id=False) self.assertHTMLEqual( f.as_ul(), - '''<li>Headline: <input type="text" name="headline" maxlength="50" required /></li> -<li>Slug: <input type="text" name="slug" maxlength="50" required /></li> -<li>Pub date: <input type="text" name="pub_date" required /></li> + '''<li>Headline: <input type="text" name="headline" maxlength="50" required></li> +<li>Slug: <input type="text" name="slug" maxlength="50" required></li> +<li>Pub date: <input type="text" name="pub_date" required></li> <li>Writer: <select name="writer" required> <option value="" selected>---------</option> <option value="%s">Bob Woodward</option> @@ -1517,9 +1517,9 @@ class ModelFormBasicTests(TestCase): w_bernstein = Writer.objects.create(name='Carl Bernstein') self.assertHTMLEqual( f.as_ul(), - '''<li>Headline: <input type="text" name="headline" maxlength="50" required /></li> -<li>Slug: <input type="text" name="slug" maxlength="50" required /></li> -<li>Pub date: <input type="text" name="pub_date" required /></li> + '''<li>Headline: <input type="text" name="headline" maxlength="50" required></li> +<li>Slug: <input type="text" name="slug" maxlength="50" required></li> +<li>Pub date: <input type="text" name="pub_date" required></li> <li>Writer: <select name="writer" required> <option value="" selected>---------</option> <option value="%s">Bob Woodward</option> @@ -1786,9 +1786,9 @@ class ModelChoiceFieldTests(TestCase): self.assertHTMLEqual( field.widget.render('name', []), '''<ul> -<li><label><input type="checkbox" name="name" value="%d" data-slug="entertainment" />Entertainment</label></li> -<li><label><input type="checkbox" name="name" value="%d" data-slug="its-test" />It's a test</label></li> -<li><label><input type="checkbox" name="name" value="%d" data-slug="third-test" />Third</label></li> +<li><label><input type="checkbox" name="name" value="%d" data-slug="entertainment">Entertainment</label></li> +<li><label><input type="checkbox" name="name" value="%d" data-slug="its-test">It's a test</label></li> +<li><label><input type="checkbox" name="name" value="%d" data-slug="third-test">Third</label></li> </ul>''' % (self.c1.pk, self.c2.pk, self.c3.pk), ) @@ -2059,7 +2059,7 @@ class ModelOneToOneFieldTests(TestCase): <option value="%s">Bob Woodward</option> <option value="%s">Mike Royko</option> </select></p> -<p><label for="id_age">Age:</label> <input type="number" name="age" id="id_age" min="0" required /></p>''' % ( +<p><label for="id_age">Age:</label> <input type="number" name="age" id="id_age" min="0" required></p>''' % ( self.w_woodward.pk, self.w_royko.pk, ) ) @@ -2081,7 +2081,7 @@ class ModelOneToOneFieldTests(TestCase): <option value="%s">Mike Royko</option> </select></p> <p><label for="id_age">Age:</label> -<input type="number" name="age" value="65" id="id_age" min="0" required /></p>''' % ( +<input type="number" name="age" value="65" id="id_age" min="0" required></p>''' % ( self.w_woodward.pk, self.w_royko.pk, ) ) @@ -2194,7 +2194,7 @@ class FileAndImageFieldTests(TestCase): form = DocumentForm(instance=doc) self.assertHTMLEqual( str(form['myfile']), - '<input id="id_myfile" name="myfile" type="file" />' + '<input id="id_myfile" name="myfile" type="file">' ) def test_file_field_data(self): @@ -2569,7 +2569,7 @@ class OtherModelFormTests(TestCase): f = ModelFormWithMedia() self.assertHTMLEqual( str(f.media), - '''<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" /> + '''<link href="/some/form/css" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/some/form/javascript"></script>''' ) @@ -2644,9 +2644,9 @@ class OtherModelFormTests(TestCase): self.assertHTMLEqual( str(CategoryForm()), '''<tr><th><label for="id_description">Description:</label></th> -<td><input type="text" name="description" id="id_description" required /></td></tr> +<td><input type="text" name="description" id="id_description" required></td></tr> <tr><th><label for="id_url">The URL:</label></th> -<td><input id="id_url" type="text" name="url" maxlength="40" required /></td></tr>''' +<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr>''' ) # to_field_name should also work on ModelMultipleChoiceField ################## @@ -2665,7 +2665,7 @@ class OtherModelFormTests(TestCase): self.assertHTMLEqual( str(CustomFieldForExclusionForm()), '''<tr><th><label for="id_name">Name:</label></th> -<td><input id="id_name" type="text" name="name" maxlength="10" required /></td></tr>''' +<td><input id="id_name" type="text" name="name" maxlength="10" required></td></tr>''' ) def test_iterable_model_m2m(self): @@ -2679,7 +2679,7 @@ class OtherModelFormTests(TestCase): self.maxDiff = 1024 self.assertHTMLEqual( form.as_p(), - """<p><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="50" required /></p> + """<p><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="50" required></p> <p><label for="id_colours">Colours:</label> <select multiple name="colours" id="id_colours" required> <option value="%(blue_pk)s">Blue</option> @@ -2699,19 +2699,19 @@ class OtherModelFormTests(TestCase): form.as_p(), """ <p><label for="id_title">Title:</label> - <input id="id_title" maxlength="30" name="title" type="text" required /></p> + <input id="id_title" maxlength="30" name="title" type="text" required></p> <p><label for="id_date_published">Date published:</label> - <input id="id_date_published" name="date_published" type="text" value="{0}" required /> - <input id="initial-id_date_published" name="initial-date_published" type="hidden" value="{0}" /></p> + <input id="id_date_published" name="date_published" type="text" value="{0}" required> + <input id="initial-id_date_published" name="initial-date_published" type="hidden" value="{0}"></p> <p><label for="id_mode">Mode:</label> <select id="id_mode" name="mode"> <option value="di" selected>direct</option> <option value="de">delayed</option></select> - <input id="initial-id_mode" name="initial-mode" type="hidden" value="di" /></p> + <input id="initial-id_mode" name="initial-mode" type="hidden" value="di"></p> <p><label for="id_category">Category:</label> <select id="id_category" name="category"> <option value="1">Games</option> <option value="2">Comics</option> <option value="3" selected>Novel</option></select> - <input id="initial-id_category" name="initial-category" type="hidden" value="3" /> + <input id="initial-id_category" name="initial-category" type="hidden" value="3"> """.format(today_str) ) empty_data = { diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py index 92d607f7c3..4d00a589ce 100644 --- a/tests/model_formsets/tests.py +++ b/tests/model_formsets/tests.py @@ -152,20 +152,20 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_form-0-name">Name:</label>' - '<input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" />' - '<input type="hidden" name="form-0-id" id="id_form-0-id" /></p>' + '<input id="id_form-0-name" type="text" name="form-0-name" maxlength="100">' + '<input type="hidden" name="form-0-id" id="id_form-0-id"></p>' ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_form-1-name">Name:</label>' - '<input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" />' - '<input type="hidden" name="form-1-id" id="id_form-1-id" /></p>' + '<input id="id_form-1-name" type="text" name="form-1-name" maxlength="100">' + '<input type="hidden" name="form-1-id" id="id_form-1-id"></p>' ) self.assertHTMLEqual( formset.forms[2].as_p(), '<p><label for="id_form-2-name">Name:</label>' - ' <input id="id_form-2-name" type="text" name="form-2-name" maxlength="100" />' - '<input type="hidden" name="form-2-id" id="id_form-2-id" /></p>' + ' <input id="id_form-2-name" type="text" name="form-2-name" maxlength="100">' + '<input type="hidden" name="form-2-id" id="id_form-2-id"></p>' ) data = { @@ -202,20 +202,20 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_form-0-name">Name:</label>' - '<input id="id_form-0-name" type="text" name="form-0-name" value="Arthur Rimbaud" maxlength="100" />' - '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></p>' % author2.id + '<input id="id_form-0-name" type="text" name="form-0-name" value="Arthur Rimbaud" maxlength="100">' + '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id"></p>' % author2.id ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_form-1-name">Name:</label>' - '<input id="id_form-1-name" type="text" name="form-1-name" value="Charles Baudelaire" maxlength="100" />' - '<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" /></p>' % author1.id + '<input id="id_form-1-name" type="text" name="form-1-name" value="Charles Baudelaire" maxlength="100">' + '<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id"></p>' % author1.id ) self.assertHTMLEqual( formset.forms[2].as_p(), '<p><label for="id_form-2-name">Name:</label>' - '<input id="id_form-2-name" type="text" name="form-2-name" maxlength="100" />' - '<input type="hidden" name="form-2-id" id="id_form-2-id" /></p>' + '<input id="id_form-2-name" type="text" name="form-2-name" maxlength="100">' + '<input type="hidden" name="form-2-id" id="id_form-2-id"></p>' ) data = { @@ -253,36 +253,36 @@ class ModelFormsetTest(TestCase): formset.forms[0].as_p(), '<p><label for="id_form-0-name">Name:</label>' '<input id="id_form-0-name" type="text" name="form-0-name" ' - 'value="Arthur Rimbaud" maxlength="100" /></p>' + 'value="Arthur Rimbaud" maxlength="100"></p>' '<p><label for="id_form-0-DELETE">Delete:</label>' - '<input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE" />' - '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></p>' % author2.id + '<input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE">' + '<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id"></p>' % author2.id ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_form-1-name">Name:</label>' '<input id="id_form-1-name" type="text" name="form-1-name" ' - 'value="Charles Baudelaire" maxlength="100" /></p>' + 'value="Charles Baudelaire" maxlength="100"></p>' '<p><label for="id_form-1-DELETE">Delete:</label>' - '<input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE" />' - '<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" /></p>' % author1.id + '<input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE">' + '<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id"></p>' % author1.id ) self.assertHTMLEqual( formset.forms[2].as_p(), '<p><label for="id_form-2-name">Name:</label>' '<input id="id_form-2-name" type="text" name="form-2-name" ' - 'value="Paul Verlaine" maxlength="100" /></p>' + 'value="Paul Verlaine" maxlength="100"></p>' '<p><label for="id_form-2-DELETE">Delete:</label>' - '<input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE" />' - '<input type="hidden" name="form-2-id" value="%d" id="id_form-2-id" /></p>' % author3.id + '<input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE">' + '<input type="hidden" name="form-2-id" value="%d" id="id_form-2-id"></p>' % author3.id ) self.assertHTMLEqual( formset.forms[3].as_p(), '<p><label for="id_form-3-name">Name:</label>' - '<input id="id_form-3-name" type="text" name="form-3-name" maxlength="100" /></p>' + '<input id="id_form-3-name" type="text" name="form-3-name" maxlength="100"></p>' '<p><label for="id_form-3-DELETE">Delete:</label>' - '<input type="checkbox" name="form-3-DELETE" id="id_form-3-DELETE" />' - '<input type="hidden" name="form-3-id" id="id_form-3-id" /></p>' + '<input type="checkbox" name="form-3-DELETE" id="id_form-3-DELETE">' + '<input type="hidden" name="form-3-id" id="id_form-3-id"></p>' ) data = { @@ -528,10 +528,10 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_form-0-name">Name:</label>' - '<input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /></p>' + '<input id="id_form-0-name" type="text" name="form-0-name" maxlength="100"></p>' '<p><label for="id_form-0-write_speed">Write speed:</label>' - '<input type="number" name="form-0-write_speed" id="id_form-0-write_speed" />' - '<input type="hidden" name="form-0-author_ptr" id="id_form-0-author_ptr" /></p>' + '<input type="number" name="form-0-write_speed" id="id_form-0-write_speed">' + '<input type="hidden" name="form-0-author_ptr" id="id_form-0-author_ptr"></p>' ) data = { @@ -556,18 +556,18 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_form-0-name">Name:</label>' - '<input id="id_form-0-name" type="text" name="form-0-name" value="Ernest Hemingway" maxlength="100" /></p>' + '<input id="id_form-0-name" type="text" name="form-0-name" value="Ernest Hemingway" maxlength="100"></p>' '<p><label for="id_form-0-write_speed">Write speed:</label>' - '<input type="number" name="form-0-write_speed" value="10" id="id_form-0-write_speed" />' - '<input type="hidden" name="form-0-author_ptr" value="%d" id="id_form-0-author_ptr" /></p>' % hemingway_id + '<input type="number" name="form-0-write_speed" value="10" id="id_form-0-write_speed">' + '<input type="hidden" name="form-0-author_ptr" value="%d" id="id_form-0-author_ptr"></p>' % hemingway_id ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_form-1-name">Name:</label>' - '<input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" /></p>' + '<input id="id_form-1-name" type="text" name="form-1-name" maxlength="100"></p>' '<p><label for="id_form-1-write_speed">Write speed:</label>' - '<input type="number" name="form-1-write_speed" id="id_form-1-write_speed" />' - '<input type="hidden" name="form-1-author_ptr" id="id_form-1-author_ptr" /></p>' + '<input type="number" name="form-1-write_speed" id="id_form-1-write_speed">' + '<input type="hidden" name="form-1-author_ptr" id="id_form-1-author_ptr"></p>' ) data = { @@ -598,23 +598,23 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" ' - 'name="book_set-0-title" maxlength="100" /><input type="hidden" name="book_set-0-author" value="%d" ' - 'id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" id="id_book_set-0-id" />' + 'name="book_set-0-title" maxlength="100"><input type="hidden" name="book_set-0-author" value="%d" ' + 'id="id_book_set-0-author"><input type="hidden" name="book_set-0-id" id="id_book_set-0-id">' '</p>' % author.id ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_book_set-1-title">Title:</label>' - '<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" />' - '<input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author" />' - '<input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' % author.id + '<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100">' + '<input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author">' + '<input type="hidden" name="book_set-1-id" id="id_book_set-1-id"></p>' % author.id ) self.assertHTMLEqual( formset.forms[2].as_p(), '<p><label for="id_book_set-2-title">Title:</label>' - '<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" />' - '<input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author" />' - '<input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' % author.id + '<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100">' + '<input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author">' + '<input type="hidden" name="book_set-2-id" id="id_book_set-2-id"></p>' % author.id ) data = { @@ -648,25 +648,25 @@ class ModelFormsetTest(TestCase): formset.forms[0].as_p(), '<p><label for="id_book_set-0-title">Title:</label>' '<input id="id_book_set-0-title" type="text" name="book_set-0-title" ' - 'value="Les Fleurs du Mal" maxlength="100" />' - '<input type="hidden" name="book_set-0-author" value="%d" id="id_book_set-0-author" />' - '<input type="hidden" name="book_set-0-id" value="%d" id="id_book_set-0-id" /></p>' % ( + 'value="Les Fleurs du Mal" maxlength="100">' + '<input type="hidden" name="book_set-0-author" value="%d" id="id_book_set-0-author">' + '<input type="hidden" name="book_set-0-id" value="%d" id="id_book_set-0-id"></p>' % ( author.id, book1.id, ) ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_book_set-1-title">Title:</label>' - '<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" />' - '<input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author" />' - '<input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' % author.id + '<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100">' + '<input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author">' + '<input type="hidden" name="book_set-1-id" id="id_book_set-1-id"></p>' % author.id ) self.assertHTMLEqual( formset.forms[2].as_p(), '<p><label for="id_book_set-2-title">Title:</label>' - '<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" />' - '<input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author" />' - '<input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' % author.id + '<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100">' + '<input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author">' + '<input type="hidden" name="book_set-2-id" id="id_book_set-2-id"></p>' % author.id ) data = { @@ -733,17 +733,17 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_test-0-title">Title:</label>' - '<input id="id_test-0-title" type="text" name="test-0-title" maxlength="100" />' - '<input type="hidden" name="test-0-author" id="id_test-0-author" />' - '<input type="hidden" name="test-0-id" id="id_test-0-id" /></p>' + '<input id="id_test-0-title" type="text" name="test-0-title" maxlength="100">' + '<input type="hidden" name="test-0-author" id="id_test-0-author">' + '<input type="hidden" name="test-0-id" id="id_test-0-id"></p>' ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_test-1-title">Title:</label>' - '<input id="id_test-1-title" type="text" name="test-1-title" maxlength="100" />' - '<input type="hidden" name="test-1-author" id="id_test-1-author" />' - '<input type="hidden" name="test-1-id" id="id_test-1-id" /></p>' + '<input id="id_test-1-title" type="text" name="test-1-title" maxlength="100">' + '<input type="hidden" name="test-1-author" id="id_test-1-author">' + '<input type="hidden" name="test-1-id" id="id_test-1-id"></p>' ) def test_inline_formsets_with_custom_pk(self): @@ -762,12 +762,12 @@ class ModelFormsetTest(TestCase): formset.forms[0].as_p(), '<p><label for="id_bookwithcustompk_set-0-my_pk">My pk:</label>' '<input id="id_bookwithcustompk_set-0-my_pk" type="number" ' - 'name="bookwithcustompk_set-0-my_pk" step="1" /></p>' + 'name="bookwithcustompk_set-0-my_pk" step="1"></p>' '<p><label for="id_bookwithcustompk_set-0-title">Title:</label>' '<input id="id_bookwithcustompk_set-0-title" type="text" ' - 'name="bookwithcustompk_set-0-title" maxlength="100" />' + 'name="bookwithcustompk_set-0-title" maxlength="100">' '<input type="hidden" name="bookwithcustompk_set-0-author" ' - 'value="1" id="id_bookwithcustompk_set-0-author" /></p>' + 'value="1" id="id_bookwithcustompk_set-0-author"></p>' ) data = { @@ -802,14 +802,14 @@ class ModelFormsetTest(TestCase): formset.forms[0].as_p(), '<p><label for="id_alternatebook_set-0-title">Title:</label>' '<input id="id_alternatebook_set-0-title" type="text" ' - 'name="alternatebook_set-0-title" maxlength="100" /></p>' + 'name="alternatebook_set-0-title" maxlength="100"></p>' '<p><label for="id_alternatebook_set-0-notes">Notes:</label>' '<input id="id_alternatebook_set-0-notes" type="text" ' - 'name="alternatebook_set-0-notes" maxlength="100" />' + 'name="alternatebook_set-0-notes" maxlength="100">' '<input type="hidden" name="alternatebook_set-0-author" value="1" ' - 'id="id_alternatebook_set-0-author" />' + 'id="id_alternatebook_set-0-author">' '<input type="hidden" name="alternatebook_set-0-book_ptr" ' - 'id="id_alternatebook_set-0-book_ptr" /></p>' + 'id="id_alternatebook_set-0-book_ptr"></p>' ) data = { @@ -905,39 +905,39 @@ class ModelFormsetTest(TestCase): formset.forms[0].as_p(), '<p><label for="id_book_set-0-title">Title:</label>' '<input id="id_book_set-0-title" type="text" name="book_set-0-title" ' - 'value="Les Paradis Artificiels" maxlength="100" />' - '<input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author" />' - '<input type="hidden" name="book_set-0-id" value="1" id="id_book_set-0-id" /></p>' + 'value="Les Paradis Artificiels" maxlength="100">' + '<input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author">' + '<input type="hidden" name="book_set-0-id" value="1" id="id_book_set-0-id"></p>' ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_book_set-1-title">Title:</label>' '<input id="id_book_set-1-title" type="text" name="book_set-1-title" ' - 'value="Les Fleurs du Mal" maxlength="100" />' - '<input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author" />' - '<input type="hidden" name="book_set-1-id" value="2" id="id_book_set-1-id" /></p>' + 'value="Les Fleurs du Mal" maxlength="100">' + '<input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author">' + '<input type="hidden" name="book_set-1-id" value="2" id="id_book_set-1-id"></p>' ) self.assertHTMLEqual( formset.forms[2].as_p(), '<p><label for="id_book_set-2-title">Title:</label>' '<input id="id_book_set-2-title" type="text" name="book_set-2-title" ' - 'value="Flowers of Evil" maxlength="100" />' - '<input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author" />' - '<input type="hidden" name="book_set-2-id" value="3" id="id_book_set-2-id" /></p>' + 'value="Flowers of Evil" maxlength="100">' + '<input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author">' + '<input type="hidden" name="book_set-2-id" value="3" id="id_book_set-2-id"></p>' ) self.assertHTMLEqual( formset.forms[3].as_p(), '<p><label for="id_book_set-3-title">Title:</label>' - '<input id="id_book_set-3-title" type="text" name="book_set-3-title" maxlength="100" />' - '<input type="hidden" name="book_set-3-author" value="1" id="id_book_set-3-author" />' - '<input type="hidden" name="book_set-3-id" id="id_book_set-3-id" /></p>' + '<input id="id_book_set-3-title" type="text" name="book_set-3-title" maxlength="100">' + '<input type="hidden" name="book_set-3-author" value="1" id="id_book_set-3-author">' + '<input type="hidden" name="book_set-3-id" id="id_book_set-3-id"></p>' ) self.assertHTMLEqual( formset.forms[4].as_p(), '<p><label for="id_book_set-4-title">Title:</label>' - '<input id="id_book_set-4-title" type="text" name="book_set-4-title" maxlength="100" />' - '<input type="hidden" name="book_set-4-author" value="1" id="id_book_set-4-author" />' - '<input type="hidden" name="book_set-4-id" id="id_book_set-4-id" /></p>' + '<input id="id_book_set-4-title" type="text" name="book_set-4-title" maxlength="100">' + '<input type="hidden" name="book_set-4-author" value="1" id="id_book_set-4-author">' + '<input type="hidden" name="book_set-4-id" id="id_book_set-4-id"></p>' ) data = { @@ -962,23 +962,23 @@ class ModelFormsetTest(TestCase): formset.forms[0].as_p(), '<p><label for="id_book_set-0-title">Title:</label>' '<input id="id_book_set-0-title" type="text" name="book_set-0-title" ' - 'value="Flowers of Evil" maxlength="100" />' - '<input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author" />' - '<input type="hidden" name="book_set-0-id" value="3" id="id_book_set-0-id" /></p>' + 'value="Flowers of Evil" maxlength="100">' + '<input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author">' + '<input type="hidden" name="book_set-0-id" value="3" id="id_book_set-0-id"></p>' ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_book_set-1-title">Title:</label>' - '<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" />' - '<input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author" />' - '<input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' + '<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100">' + '<input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author">' + '<input type="hidden" name="book_set-1-id" id="id_book_set-1-id"></p>' ) self.assertHTMLEqual( formset.forms[2].as_p(), '<p><label for="id_book_set-2-title">Title:</label>' - '<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" />' - '<input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author" />' - '<input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' + '<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100">' + '<input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author">' + '<input type="hidden" name="book_set-2-id" id="id_book_set-2-id"></p>' ) data = { @@ -1040,9 +1040,9 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_form-0-my_pk">My pk:</label> <input id="id_form-0-my_pk" type="text" ' - 'name="form-0-my_pk" maxlength="10" /></p>' + 'name="form-0-my_pk" maxlength="10"></p>' '<p><label for="id_form-0-some_field">Some field:</label>' - '<input id="id_form-0-some_field" type="text" name="form-0-some_field" maxlength="100" /></p>' + '<input id="id_form-0-some_field" type="text" name="form-0-some_field" maxlength="100"></p>' ) # Custom primary keys with ForeignKey, OneToOneField and AutoField ############ @@ -1055,16 +1055,16 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_owner_set-0-name">Name:</label>' - '<input id="id_owner_set-0-name" type="text" name="owner_set-0-name" maxlength="100" />' - '<input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place" />' - '<input type="hidden" name="owner_set-0-auto_id" id="id_owner_set-0-auto_id" /></p>' + '<input id="id_owner_set-0-name" type="text" name="owner_set-0-name" maxlength="100">' + '<input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place">' + '<input type="hidden" name="owner_set-0-auto_id" id="id_owner_set-0-auto_id"></p>' ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_owner_set-1-name">Name:</label>' - '<input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100" />' - '<input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place" />' - '<input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id" /></p>' + '<input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100">' + '<input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place">' + '<input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id"></p>' ) data = { @@ -1089,24 +1089,24 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_owner_set-0-name">Name:</label>' - '<input id="id_owner_set-0-name" type="text" name="owner_set-0-name" value="Joe Perry" maxlength="100" />' - '<input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place" />' - '<input type="hidden" name="owner_set-0-auto_id" value="%d" id="id_owner_set-0-auto_id" /></p>' + '<input id="id_owner_set-0-name" type="text" name="owner_set-0-name" value="Joe Perry" maxlength="100">' + '<input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place">' + '<input type="hidden" name="owner_set-0-auto_id" value="%d" id="id_owner_set-0-auto_id"></p>' % owner1.auto_id ) self.assertHTMLEqual( formset.forms[1].as_p(), '<p><label for="id_owner_set-1-name">Name:</label>' - '<input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100" />' - '<input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place" />' - '<input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id" /></p>' + '<input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100">' + '<input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place">' + '<input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id"></p>' ) self.assertHTMLEqual( formset.forms[2].as_p(), '<p><label for="id_owner_set-2-name">Name:</label>' - '<input id="id_owner_set-2-name" type="text" name="owner_set-2-name" maxlength="100" />' - '<input type="hidden" name="owner_set-2-place" value="1" id="id_owner_set-2-place" />' - '<input type="hidden" name="owner_set-2-auto_id" id="id_owner_set-2-auto_id" /></p>' + '<input id="id_owner_set-2-name" type="text" name="owner_set-2-name" maxlength="100">' + '<input type="hidden" name="owner_set-2-place" value="1" id="id_owner_set-2-place">' + '<input type="hidden" name="owner_set-2-auto_id" id="id_owner_set-2-auto_id"></p>' ) data = { @@ -1141,7 +1141,7 @@ class ModelFormsetTest(TestCase): '<option value="%d">Jack Berry at Giordanos</option>' '</select></p>' '<p><label for="id_form-0-age">Age:</label>' - '<input type="number" name="form-0-age" id="id_form-0-age" min="0" /></p>' + '<input type="number" name="form-0-age" id="id_form-0-age" min="0"></p>' % (owner1.auto_id, owner2.auto_id) ) @@ -1154,8 +1154,8 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_ownerprofile-0-age">Age:</label>' - '<input type="number" name="ownerprofile-0-age" id="id_ownerprofile-0-age" min="0" />' - '<input type="hidden" name="ownerprofile-0-owner" value="%d" id="id_ownerprofile-0-owner" /></p>' + '<input type="number" name="ownerprofile-0-age" id="id_ownerprofile-0-age" min="0">' + '<input type="hidden" name="ownerprofile-0-owner" value="%d" id="id_ownerprofile-0-owner"></p>' % owner1.auto_id ) @@ -1179,8 +1179,8 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_ownerprofile-0-age">Age:</label>' - '<input type="number" name="ownerprofile-0-age" value="54" id="id_ownerprofile-0-age" min="0" />' - '<input type="hidden" name="ownerprofile-0-owner" value="%d" id="id_ownerprofile-0-owner" /></p>' + '<input type="number" name="ownerprofile-0-age" value="54" id="id_ownerprofile-0-age" min="0">' + '<input type="hidden" name="ownerprofile-0-owner" value="%d" id="id_ownerprofile-0-owner"></p>' % owner1.auto_id ) @@ -1212,11 +1212,11 @@ class ModelFormsetTest(TestCase): self.assertHTMLEqual( formset.forms[0].as_p(), '<p><label for="id_location_set-0-lat">Lat:</label>' - '<input id="id_location_set-0-lat" type="text" name="location_set-0-lat" maxlength="100" /></p>' + '<input id="id_location_set-0-lat" type="text" name="location_set-0-lat" maxlength="100"></p>' '<p><label for="id_location_set-0-lon">Lon:</label> ' - '<input id="id_location_set-0-lon" type="text" name="location_set-0-lon" maxlength="100" />' - '<input type="hidden" name="location_set-0-place" value="1" id="id_location_set-0-place" />' - '<input type="hidden" name="location_set-0-id" id="id_location_set-0-id" /></p>' + '<input id="id_location_set-0-lon" type="text" name="location_set-0-lon" maxlength="100">' + '<input type="hidden" name="location_set-0-place" value="1" id="id_location_set-0-place">' + '<input type="hidden" name="location_set-0-id" id="id_location_set-0-id"></p>' ) def test_foreign_keys_in_parents(self): @@ -1372,13 +1372,13 @@ class ModelFormsetTest(TestCase): result, '<p><label for="id_membership_set-0-date_joined">Date joined:</label>' '<input type="text" name="membership_set-0-date_joined" ' - 'value="__DATETIME__" id="id_membership_set-0-date_joined" />' + 'value="__DATETIME__" id="id_membership_set-0-date_joined">' '<input type="hidden" name="initial-membership_set-0-date_joined" value="__DATETIME__" ' - 'id="initial-membership_set-0-id_membership_set-0-date_joined" /></p>' + 'id="initial-membership_set-0-id_membership_set-0-date_joined"></p>' '<p><label for="id_membership_set-0-karma">Karma:</label>' - '<input type="number" name="membership_set-0-karma" id="id_membership_set-0-karma" />' - '<input type="hidden" name="membership_set-0-person" value="%d" id="id_membership_set-0-person" />' - '<input type="hidden" name="membership_set-0-id" id="id_membership_set-0-id" /></p>' + '<input type="number" name="membership_set-0-karma" id="id_membership_set-0-karma">' + '<input type="hidden" name="membership_set-0-person" value="%d" id="id_membership_set-0-person">' + '<input type="hidden" name="membership_set-0-id" id="id_membership_set-0-id"></p>' % person.id) # test for validation with callable defaults. Validations rely on hidden fields @@ -1724,7 +1724,7 @@ class TestModelFormsetOverridesTroughFormMeta(TestCase): form = PoetFormSet.form() self.assertHTMLEqual( "%s" % form['name'], - '<input id="id_name" maxlength="100" type="text" class="poet" name="name" required />' + '<input id="id_name" maxlength="100" type="text" class="poet" name="name" required>' ) def test_inlineformset_factory_widgets(self): @@ -1735,7 +1735,7 @@ class TestModelFormsetOverridesTroughFormMeta(TestCase): form = BookFormSet.form() self.assertHTMLEqual( "%s" % form['title'], - '<input class="book" id="id_title" maxlength="100" name="title" type="text" required />' + '<input class="book" id="id_title" maxlength="100" name="title" type="text" required>' ) def test_modelformset_factory_labels_overrides(self): diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py index e2ad3e8dcc..4776bda934 100644 --- a/tests/postgres_tests/test_array.py +++ b/tests/postgres_tests/test_array.py @@ -805,9 +805,9 @@ class TestSplitFormField(PostgreSQLTestCase): <tr> <th><label for="id_array_0">Array:</label></th> <td> - <input id="id_array_0" name="array_0" type="text" required /> - <input id="id_array_1" name="array_1" type="text" required /> - <input id="id_array_2" name="array_2" type="text" required /> + <input id="id_array_0" name="array_0" type="text" required> + <input id="id_array_1" name="array_1" type="text" required> + <input id="id_array_2" name="array_2" type="text" required> </td> </tr> ''') @@ -876,8 +876,8 @@ class TestSplitFormWidget(PostgreSQLWidgetTestCase): self.check_html( SplitArrayWidget(forms.TextInput(), size=2), 'array', None, """ - <input name="array_0" type="text" /> - <input name="array_1" type="text" /> + <input name="array_0" type="text"> + <input name="array_1" type="text"> """ ) @@ -887,8 +887,8 @@ class TestSplitFormWidget(PostgreSQLWidgetTestCase): 'array', ['val1', 'val2'], attrs={'id': 'foo'}, html=( """ - <input id="foo_0" name="array_0" type="text" value="val1" /> - <input id="foo_1" name="array_1" type="text" value="val2" /> + <input id="foo_0" name="array_0" type="text" value="val1"> + <input id="foo_1" name="array_1" type="text" value="val2"> """ ) ) diff --git a/tests/postgres_tests/test_ranges.py b/tests/postgres_tests/test_ranges.py index 923e43b0ea..6aa6c889dd 100644 --- a/tests/postgres_tests/test_ranges.py +++ b/tests/postgres_tests/test_ranges.py @@ -468,10 +468,10 @@ class TestFormField(PostgreSQLTestCase): <label for="id_field_0">Field:</label> </th> <td> - <input id="id_field_0_0" name="field_0_0" type="text" /> - <input id="id_field_0_1" name="field_0_1" type="text" /> - <input id="id_field_1_0" name="field_1_0" type="text" /> - <input id="id_field_1_1" name="field_1_1" type="text" /> + <input id="id_field_0_0" name="field_0_0" type="text"> + <input id="id_field_0_1" name="field_0_1" type="text"> + <input id="id_field_1_0" name="field_1_0" type="text"> + <input id="id_field_1_1" name="field_1_1" type="text"> </td> </tr> ''') @@ -499,8 +499,8 @@ class TestFormField(PostgreSQLTestCase): <tr> <th><label for="id_ints_0">Ints:</label></th> <td> - <input id="id_ints_0" name="ints_0" type="number" /> - <input id="id_ints_1" name="ints_1" type="number" /> + <input id="id_ints_0" name="ints_0" type="number"> + <input id="id_ints_1" name="ints_1" type="number"> </td> </tr> ''') @@ -700,11 +700,11 @@ class TestWidget(PostgreSQLTestCase): f = pg_forms.ranges.DateTimeRangeField() self.assertHTMLEqual( f.widget.render('datetimerange', ''), - '<input type="text" name="datetimerange_0" /><input type="text" name="datetimerange_1" />' + '<input type="text" name="datetimerange_0"><input type="text" name="datetimerange_1">' ) self.assertHTMLEqual( f.widget.render('datetimerange', None), - '<input type="text" name="datetimerange_0" /><input type="text" name="datetimerange_1" />' + '<input type="text" name="datetimerange_0"><input type="text" name="datetimerange_1">' ) dt_range = DateTimeTZRange( datetime.datetime(2006, 1, 10, 7, 30), @@ -712,6 +712,6 @@ class TestWidget(PostgreSQLTestCase): ) self.assertHTMLEqual( f.widget.render('datetimerange', dt_range), - '<input type="text" name="datetimerange_0" value="2006-01-10 07:30:00" />' - '<input type="text" name="datetimerange_1" value="2006-02-12 09:50:00" />' + '<input type="text" name="datetimerange_0" value="2006-01-10 07:30:00">' + '<input type="text" name="datetimerange_1" value="2006-02-12 09:50:00">' ) diff --git a/tests/staticfiles_tests/test_forms.py b/tests/staticfiles_tests/test_forms.py index ec9f069ed8..c5dc66de61 100644 --- a/tests/staticfiles_tests/test_forms.py +++ b/tests/staticfiles_tests/test_forms.py @@ -29,8 +29,8 @@ class StaticFilesFormsMediaTestCase(SimpleTestCase): ) self.assertEqual( str(m), - """<link href="https://example.com/assets/path/to/css1" type="text/css" media="all" rel="stylesheet" /> -<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" /> + """<link href="https://example.com/assets/path/to/css1" type="text/css" media="all" rel="stylesheet"> +<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet"> <script type="text/javascript" src="/path/to/js1"></script> <script type="text/javascript" src="http://media.other.com/path/to/js2"></script> <script type="text/javascript" src="https://secure.other.com/path/to/js3"></script> diff --git a/tests/template_backends/test_dummy.py b/tests/template_backends/test_dummy.py index 92861c24da..24c30c97e3 100644 --- a/tests/template_backends/test_dummy.py +++ b/tests/template_backends/test_dummy.py @@ -81,7 +81,7 @@ class TemplateStringsTests(SimpleTestCase): template = self.engine.get_template('template_backends/csrf.html') content = template.render(request=request) - expected = '<input type="hidden" name="csrfmiddlewaretoken" value="([^"]+)" />' + expected = '<input type="hidden" name="csrfmiddlewaretoken" value="([^"]+)">' match = re.match(expected, content) or re.match(expected.replace('"', "'"), content) self.assertTrue(match, "hidden csrftoken field not found in output") self.assertTrue(equivalent_tokens(match.group(1), get_token(request))) diff --git a/tests/template_tests/filter_tests/test_linebreaks.py b/tests/template_tests/filter_tests/test_linebreaks.py index 0f3cd7a117..8fdb91f377 100644 --- a/tests/template_tests/filter_tests/test_linebreaks.py +++ b/tests/template_tests/filter_tests/test_linebreaks.py @@ -15,12 +15,12 @@ class LinebreaksTests(SimpleTestCase): @setup({'linebreaks01': '{{ a|linebreaks }} {{ b|linebreaks }}'}) def test_linebreaks01(self): output = self.engine.render_to_string('linebreaks01', {"a": "x&\ny", "b": mark_safe("x&\ny")}) - self.assertEqual(output, "<p>x&<br />y</p> <p>x&<br />y</p>") + self.assertEqual(output, "<p>x&<br>y</p> <p>x&<br>y</p>") @setup({'linebreaks02': '{% autoescape off %}{{ a|linebreaks }} {{ b|linebreaks }}{% endautoescape %}'}) def test_linebreaks02(self): output = self.engine.render_to_string('linebreaks02', {"a": "x&\ny", "b": mark_safe("x&\ny")}) - self.assertEqual(output, "<p>x&<br />y</p> <p>x&<br />y</p>") + self.assertEqual(output, "<p>x&<br>y</p> <p>x&<br>y</p>") class FunctionTests(SimpleTestCase): @@ -29,13 +29,13 @@ class FunctionTests(SimpleTestCase): self.assertEqual(linebreaks_filter('line 1'), '<p>line 1</p>') def test_newline(self): - self.assertEqual(linebreaks_filter('line 1\nline 2'), '<p>line 1<br />line 2</p>') + self.assertEqual(linebreaks_filter('line 1\nline 2'), '<p>line 1<br>line 2</p>') def test_carriage(self): - self.assertEqual(linebreaks_filter('line 1\rline 2'), '<p>line 1<br />line 2</p>') + self.assertEqual(linebreaks_filter('line 1\rline 2'), '<p>line 1<br>line 2</p>') def test_carriage_newline(self): - self.assertEqual(linebreaks_filter('line 1\r\nline 2'), '<p>line 1<br />line 2</p>') + self.assertEqual(linebreaks_filter('line 1\r\nline 2'), '<p>line 1<br>line 2</p>') def test_non_string_input(self): self.assertEqual(linebreaks_filter(123), '<p>123</p>') @@ -43,18 +43,18 @@ class FunctionTests(SimpleTestCase): def test_autoescape(self): self.assertEqual( linebreaks_filter('foo\n<a>bar</a>\nbuz'), - '<p>foo<br /><a>bar</a><br />buz</p>', + '<p>foo<br><a>bar</a><br>buz</p>', ) def test_autoescape_off(self): self.assertEqual( linebreaks_filter('foo\n<a>bar</a>\nbuz', autoescape=False), - '<p>foo<br /><a>bar</a><br />buz</p>', + '<p>foo<br><a>bar</a><br>buz</p>', ) def test_lazy_string_input(self): add_header = lazy(lambda string: 'Header\n\n' + string, str) self.assertEqual( linebreaks_filter(add_header('line 1\r\nline2')), - '<p>Header</p>\n\n<p>line 1<br />line2</p>' + '<p>Header</p>\n\n<p>line 1<br>line2</p>' ) diff --git a/tests/template_tests/filter_tests/test_linebreaksbr.py b/tests/template_tests/filter_tests/test_linebreaksbr.py index 83a15f97db..f2583f0aaf 100644 --- a/tests/template_tests/filter_tests/test_linebreaksbr.py +++ b/tests/template_tests/filter_tests/test_linebreaksbr.py @@ -14,24 +14,24 @@ class LinebreaksbrTests(SimpleTestCase): @setup({'linebreaksbr01': '{{ a|linebreaksbr }} {{ b|linebreaksbr }}'}) def test_linebreaksbr01(self): output = self.engine.render_to_string('linebreaksbr01', {"a": "x&\ny", "b": mark_safe("x&\ny")}) - self.assertEqual(output, "x&<br />y x&<br />y") + self.assertEqual(output, "x&<br>y x&<br>y") @setup({'linebreaksbr02': '{% autoescape off %}{{ a|linebreaksbr }} {{ b|linebreaksbr }}{% endautoescape %}'}) def test_linebreaksbr02(self): output = self.engine.render_to_string('linebreaksbr02', {"a": "x&\ny", "b": mark_safe("x&\ny")}) - self.assertEqual(output, "x&<br />y x&<br />y") + self.assertEqual(output, "x&<br>y x&<br>y") class FunctionTests(SimpleTestCase): def test_newline(self): - self.assertEqual(linebreaksbr('line 1\nline 2'), 'line 1<br />line 2') + self.assertEqual(linebreaksbr('line 1\nline 2'), 'line 1<br>line 2') def test_carriage(self): - self.assertEqual(linebreaksbr('line 1\rline 2'), 'line 1<br />line 2') + self.assertEqual(linebreaksbr('line 1\rline 2'), 'line 1<br>line 2') def test_carriage_newline(self): - self.assertEqual(linebreaksbr('line 1\r\nline 2'), 'line 1<br />line 2') + self.assertEqual(linebreaksbr('line 1\r\nline 2'), 'line 1<br>line 2') def test_non_string_input(self): self.assertEqual(linebreaksbr(123), '123') @@ -39,11 +39,11 @@ class FunctionTests(SimpleTestCase): def test_autoescape(self): self.assertEqual( linebreaksbr('foo\n<a>bar</a>\nbuz'), - 'foo<br /><a>bar</a><br />buz', + 'foo<br><a>bar</a><br>buz', ) def test_autoescape_off(self): self.assertEqual( linebreaksbr('foo\n<a>bar</a>\nbuz', autoescape=False), - 'foo<br /><a>bar</a><br />buz', + 'foo<br><a>bar</a><br>buz', ) diff --git a/tests/templates/login.html b/tests/templates/login.html index d1aa5f6b7c..d9909aea60 100644 --- a/tests/templates/login.html +++ b/tests/templates/login.html @@ -11,7 +11,7 @@ <tr><td><label for="id_password">Password:</label></td><td>{{ form.password }}</td></tr> </table> -<input type="submit" value="login" /> -<input type="hidden" name="next" value="{{ next }}" /> +<input type="submit" value="login"> +<input type="hidden" name="next" value="{{ next }}"> </form> {% endblock %} diff --git a/tests/utils_tests/test_html.py b/tests/utils_tests/test_html.py index 08b31bc55a..e6d1fe9a59 100644 --- a/tests/utils_tests/test_html.py +++ b/tests/utils_tests/test_html.py @@ -57,8 +57,8 @@ class TestUtilsHtml(SimpleTestCase): def test_linebreaks(self): items = ( ("para1\n\npara2\r\rpara3", "<p>para1</p>\n\n<p>para2</p>\n\n<p>para3</p>"), - ("para1\nsub1\rsub2\n\npara2", "<p>para1<br />sub1<br />sub2</p>\n\n<p>para2</p>"), - ("para1\r\n\r\npara2\rsub1\r\rpara4", "<p>para1</p>\n\n<p>para2<br />sub1</p>\n\n<p>para4</p>"), + ("para1\nsub1\rsub2\n\npara2", "<p>para1<br>sub1<br>sub2</p>\n\n<p>para2</p>"), + ("para1\r\n\r\npara2\rsub1\r\rpara4", "<p>para1</p>\n\n<p>para2<br>sub1</p>\n\n<p>para4</p>"), ("para1\tmore\n\npara2", "<p>para1\tmore</p>\n\n<p>para2</p>"), ) for value, output in items: |
