Skip to content

Instantly share code, notes, and snippets.

@mweinelt
Created April 6, 2025 16:33
Show Gist options
  • Save mweinelt/ca116c172b4148f9e5ec5df4f35ea500 to your computer and use it in GitHub Desktop.
Save mweinelt/ca116c172b4148f9e5ec5df4f35ea500 to your computer and use it in GitHub Desktop.
django-crispy-bootstrap3> ____________________ test_form_show_errors_non_field_errors ____________________
django-crispy-bootstrap3>
django-crispy-bootstrap3> @pytest.mark.skipif(
django-crispy-bootstrap3> __version__[0] == "1", reason='#1262 fixed required attributes and empty for="".'
django-crispy-bootstrap3> )
django-crispy-bootstrap3> @override_settings(CRISPY_CLASS_CONVERTERS=CONVERTERS)
django-crispy-bootstrap3> def test_form_show_errors_non_field_errors():
django-crispy-bootstrap3> form = SampleForm({"password1": "wargame", "password2": "god"})
django-crispy-bootstrap3> form.helper = FormHelper()
django-crispy-bootstrap3> form.helper.form_show_errors = True
django-crispy-bootstrap3> form.is_valid()
django-crispy-bootstrap3>
django-crispy-bootstrap3> template = Template(
django-crispy-bootstrap3> """
django-crispy-bootstrap3> {% load crispy_forms_tags %}
django-crispy-bootstrap3> {% crispy testForm %}
django-crispy-bootstrap3> """
django-crispy-bootstrap3> )
django-crispy-bootstrap3>
django-crispy-bootstrap3> # First we render with errors
django-crispy-bootstrap3> c = Context({"testForm": form})
django-crispy-bootstrap3> # Ensure those errors were rendered
django-crispy-bootstrap3> if django.VERSION < (4, 1):
django-crispy-bootstrap3> # Removed "for = ..." from MultiWidget's <label>.
django-crispy-bootstrap3> # https://github.com/django/django/commit/c6c6cd3c5ad9c36795bb120e521590424f034ae4
django-crispy-bootstrap3> expected = parse_expected(
django-crispy-bootstrap3> "bootstrap3/test_form_helper/"
django-crispy-bootstrap3> "test_form_show_errors_non_field_errors_true_lte40.html"
django-crispy-bootstrap3> )
django-crispy-bootstrap3> elif django.VERSION >= (5, 0):
django-crispy-bootstrap3> # Added 'aria-describedby' for fields with help_text
django-crispy-bootstrap3> # https://docs.djangoproject.com/en/5.0/releases/5.0/#forms
django-crispy-bootstrap3> expected = parse_expected(
django-crispy-bootstrap3> "bootstrap3/test_form_helper/"
django-crispy-bootstrap3> "test_form_show_errors_non_field_errors_true_gte50.html"
django-crispy-bootstrap3> )
django-crispy-bootstrap3> else:
django-crispy-bootstrap3> expected = parse_expected(
django-crispy-bootstrap3> "bootstrap3/test_form_helper/"
django-crispy-bootstrap3> "test_form_show_errors_non_field_errors_true.html"
django-crispy-bootstrap3> )
django-crispy-bootstrap3> > assert parse_html(template.render(c)) == expected
django-crispy-bootstrap3> E assert <form method="post">\n<div class="alert alert-block alert-danger">\n<ul>\n<li>\nPasswords dont match\n</li>\n</ul>\n</div><div class="form-group">\n<div class="checkbox" id="div_id_is_company">\n<label class="" for="id_is_company">\n<input class="checkboxinput" id="id_is_company" name="is_company" type="checkbox">company\n</label>\n</div>\n</div><div class="form-group has-error" id="div_id_email">\n<label class="control-label requiredField" for="id_email">\nemail<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-describedby="id_email_helptext id_email_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text"><span class="help-block" id="error_1_id_email">\n<strong>\nThis field is required.\n</strong>\n</span><div class="help-block" id="hint_id_email">\nInsert your email\n</div>\n</div>\n</div><div class="form-group" id="div_id_password1">\n<label class="control-label requiredField" for="id_password1">\npassword<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password">\n</div>\n</div><div class="form-group" id="div_id_password2">\n<label class="control-label requiredField" for="id_password2">\nre-enter password<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">\n</div>\n</div><div class="form-group has-error" id="div_id_first_name">\n<label class="control-label requiredField" for="id_first_name">\nfirst name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-describedby="id_first_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text"><span class="help-block" id="error_1_id_first_name">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_last_name">\n<label class="control-label requiredField" for="id_last_name">\nlast name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-describedby="id_last_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text"><span class="help-block" id="error_1_id_last_name">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_datetime_field">\n<label class="control-label requiredField">\ndate time<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-invalid="true" class="dateinput" id="id_datetime_field_0" name="datetime_field_0" required type="text"><input aria-invalid="true" class="timeinput" id="id_datetime_field_1" name="datetime_field_1" required type="text"><span class="help-block" id="error_1_id_datetime_field">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div>\n</form> == <form method="post">\n<div class="alert alert-block alert-danger">\n<ul>\n<li>\nPasswords dont match\n</li>\n</ul>\n</div><div class="form-group">\n<div class="checkbox" id="div_id_is_company">\n<label class="" for="id_is_company">\n<input class="checkboxinput" id="id_is_company" name="is_company" type="checkbox">company\n</label>\n</div>\n</div><div class="form-group has-error" id="div_id_email">\n<label class="control-label requiredField" for="id_email">\nemail<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-describedby="id_email_helptext" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text"><span class="help-block" id="error_1_id_email">\n<strong>\nThis field is required.\n</strong>\n</span><div class="help-block" id="hint_id_email">\nInsert your email\n</div>\n</div>\n</div><div class="form-group" id="div_id_password1">\n<label class="control-label requiredField" for="id_password1">\npassword<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password">\n</div>\n</div><div class="form-group" id="div_id_password2">\n<label class="control-label requiredField" for="id_password2">\nre-enter password<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">\n</div>\n</div><div class="form-group has-error" id="div_id_first_name">\n<label class="control-label requiredField" for="id_first_name">\nfirst name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text"><span class="help-block" id="error_1_id_first_name">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_last_name">\n<label class="control-label requiredField" for="id_last_name">\nlast name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text"><span class="help-block" id="error_1_id_last_name">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_datetime_field">\n<label class="control-label requiredField">\ndate time<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-invalid="true" class="dateinput" id="id_datetime_field_0" name="datetime_field_0" required type="text"><input aria-invalid="true" class="timeinput" id="id_datetime_field_1" name="datetime_field_1" required type="text"><span class="help-block" id="error_1_id_datetime_field">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div>\n</form>
django-crispy-bootstrap3> E
django-crispy-bootstrap3> E Full diff:
django-crispy-bootstrap3> E <form method="post">
django-crispy-bootstrap3> E <div class="alert alert-block alert-danger">
django-crispy-bootstrap3> E <ul>
django-crispy-bootstrap3> E <li>
django-crispy-bootstrap3> E Passwords dont match
django-crispy-bootstrap3> E </li>
django-crispy-bootstrap3> E </ul>
django-crispy-bootstrap3> E </div><div class="form-group">
django-crispy-bootstrap3> E <div class="checkbox" id="div_id_is_company">
django-crispy-bootstrap3> E <label class="" for="id_is_company">
django-crispy-bootstrap3> E <input class="checkboxinput" id="id_is_company" name="is_company" type="checkbox">company
django-crispy-bootstrap3> E </label>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group has-error" id="div_id_email">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_email">
django-crispy-bootstrap3> E email<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E - <input aria-describedby="id_email_helptext" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text"><span class="help-block" id="error_1_id_email">
django-crispy-bootstrap3> E ? ^
django-crispy-bootstrap3> E + <input aria-describedby="id_email_helptext id_email_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text"><span class="help-block" id="error_1_id_email">
django-crispy-bootstrap3> E ? ^^^^^^^^^^^^^^^^
django-crispy-bootstrap3> E <strong>
django-crispy-bootstrap3> E This field is required.
django-crispy-bootstrap3> E </strong>
django-crispy-bootstrap3> E </span><div class="help-block" id="hint_id_email">
django-crispy-bootstrap3> E Insert your email
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group" id="div_id_password1">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_password1">
django-crispy-bootstrap3> E password<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E <input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password">
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group" id="div_id_password2">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_password2">
django-crispy-bootstrap3> E re-enter password<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E <input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group has-error" id="div_id_first_name">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_first_name">
django-crispy-bootstrap3> E first name<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E - <input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text"><span class="help-block" id="error_1_id_first_name">
django-crispy-bootstrap3> E + <input aria-describedby="id_first_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text"><span class="help-block" id="error_1_id_first_name">
django-crispy-bootstrap3> E ? +++++++++++++++++++++++++++++++++++++++
django-crispy-bootstrap3> E <strong>
django-crispy-bootstrap3> E This field is required.
django-crispy-bootstrap3> E </strong>
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group has-error" id="div_id_last_name">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_last_name">
django-crispy-bootstrap3> E last name<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E - <input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text"><span class="help-block" id="error_1_id_last_name">
django-crispy-bootstrap3> E + <input aria-describedby="id_last_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text"><span class="help-block" id="error_1_id_last_name">
django-crispy-bootstrap3> E ? ++++++++++++++++++++++++++++++++++++++
django-crispy-bootstrap3> E <strong>
django-crispy-bootstrap3> E This field is required.
django-crispy-bootstrap3> E </strong>
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group has-error" id="div_id_datetime_field">
django-crispy-bootstrap3> E <label class="control-label requiredField">
django-crispy-bootstrap3> E date time<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E <input aria-invalid="true" class="dateinput" id="id_datetime_field_0" name="datetime_field_0" required type="text"><input aria-invalid="true" class="timeinput" id="id_datetime_field_1" name="datetime_field_1" required type="text"><span class="help-block" id="error_1_id_datetime_field">
django-crispy-bootstrap3> E <strong>
django-crispy-bootstrap3> E This field is required.
django-crispy-bootstrap3> E </strong>
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </form>
django-crispy-bootstrap3>
django-crispy-bootstrap3> tests/test_form_helper.py:154: AssertionError
django-crispy-bootstrap3> _____________________ test_bootstrap_form_show_errors_bs3 ______________________
django-crispy-bootstrap3>
django-crispy-bootstrap3> @override_settings(CRISPY_CLASS_CONVERTERS=CONVERTERS)
django-crispy-bootstrap3> def test_bootstrap_form_show_errors_bs3():
django-crispy-bootstrap3> form = SampleForm(
django-crispy-bootstrap3> {
django-crispy-bootstrap3> "email": "invalidemail",
django-crispy-bootstrap3> "first_name": "first_name_too_long",
django-crispy-bootstrap3> "last_name": "last_name_too_long",
django-crispy-bootstrap3> "password1": "yes",
django-crispy-bootstrap3> "password2": "yes",
django-crispy-bootstrap3> }
django-crispy-bootstrap3> )
django-crispy-bootstrap3> form.helper = FormHelper()
django-crispy-bootstrap3> form.helper.layout = Layout(
django-crispy-bootstrap3> AppendedText("email", "whatever"),
django-crispy-bootstrap3> PrependedText("first_name", "blabla"),
django-crispy-bootstrap3> PrependedAppendedText("last_name", "foo", "bar"),
django-crispy-bootstrap3> AppendedText("password1", "whatever"),
django-crispy-bootstrap3> PrependedText("password2", "blabla"),
django-crispy-bootstrap3> )
django-crispy-bootstrap3> form.is_valid()
django-crispy-bootstrap3>
django-crispy-bootstrap3> form.helper.form_show_errors = True
django-crispy-bootstrap3> if django.VERSION >= (5, 0):
django-crispy-bootstrap3> # Added 'aria-describedby' for fields with help_text
django-crispy-bootstrap3> # https://docs.djangoproject.com/en/5.0/releases/5.0/#forms
django-crispy-bootstrap3> expected = parse_expected(
django-crispy-bootstrap3> "bootstrap3/test_form_helper/bootstrap_form_show_errors_bs3_true_gte50.html"
django-crispy-bootstrap3> )
django-crispy-bootstrap3> else:
django-crispy-bootstrap3> expected = parse_expected(
django-crispy-bootstrap3> "bootstrap3/test_form_helper/bootstrap_form_show_errors_bs3_true.html"
django-crispy-bootstrap3> )
django-crispy-bootstrap3> > assert parse_form(form) == expected
django-crispy-bootstrap3> E assert <form method="post">\n<div class="form-group has-error" id="div_id_email">\n<label class="control-label requiredField" for="id_email">\nemail<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<input aria-describedby="id_email_helptext id_email_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text" value="invalidemail"><span class="input-group-addon">\nwhatever\n</span>\n</div><span class="help-block" id="error_1_id_email">\n<strong>\nEnter a valid email address.\n</strong>\n</span><div class="help-block" id="hint_id_email">\nInsert your email\n</div>\n</div>\n</div><div class="form-group has-error" id="div_id_first_name">\n<label class="control-label requiredField" for="id_first_name">\nfirst name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nblabla\n</span><input aria-describedby="id_first_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text" value="first_name_too_long">\n</div><span class="help-block" id="error_1_id_first_name">\n<strong>\nEnsure this value has at most 5 characters (it has 19).\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_last_name">\n<label class="control-label requiredField" for="id_last_name">\nlast name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nfoo\n</span><input aria-describedby="id_last_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text" value="last_name_too_long"><span class="input-group-addon">\nbar\n</span>\n</div><span class="help-block" id="error_1_id_last_name">\n<strong>\nEnsure this value has at most 5 characters (it has 18).\n</strong>\n</span>\n</div>\n</div><div class="form-group" id="div_id_password1">\n<label class="control-label requiredField" for="id_password1">\npassword<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password"><span class="input-group-addon">\nwhatever\n</span>\n</div>\n</div>\n</div><div class="form-group" id="div_id_password2">\n<label class="control-label requiredField" for="id_password2">\nre-enter password<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nblabla\n</span><input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">\n</div>\n</div>\n</div>\n</form> == <form method="post">\n<div class="form-group has-error" id="div_id_email">\n<label class="control-label requiredField" for="id_email">\nemail<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<input aria-describedby="id_email_helptext" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text" value="invalidemail"><span class="input-group-addon">\nwhatever\n</span>\n</div><span class="help-block" id="error_1_id_email">\n<strong>\nEnter a valid email address.\n</strong>\n</span><div class="help-block" id="hint_id_email">\nInsert your email\n</div>\n</div>\n</div><div class="form-group has-error" id="div_id_first_name">\n<label class="control-label requiredField" for="id_first_name">\nfirst name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nblabla\n</span><input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text" value="first_name_too_long">\n</div><span class="help-block" id="error_1_id_first_name">\n<strong>\nEnsure this value has at most 5 characters (it has 19).\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_last_name">\n<label class="control-label requiredField" for="id_last_name">\nlast name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nfoo\n</span><input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text" value="last_name_too_long"><span class="input-group-addon">\nbar\n</span>\n</div><span class="help-block" id="error_1_id_last_name">\n<strong>\nEnsure this value has at most 5 characters (it has 18).\n</strong>\n</span>\n</div>\n</div><div class="form-group" id="div_id_password1">\n<label class="control-label requiredField" for="id_password1">\npassword<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password"><span class="input-group-addon">\nwhatever\n</span>\n</div>\n</div>\n</div><div class="form-group" id="div_id_password2">\n<label class="control-label requiredField" for="id_password2">\nre-enter password<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nblabla\n</span><input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">\n</div>\n</div>\n</div>\n</form>
django-crispy-bootstrap3> E
django-crispy-bootstrap3> E Full diff:
django-crispy-bootstrap3> E <form method="post">
django-crispy-bootstrap3> E <div class="form-group has-error" id="div_id_email">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_email">
django-crispy-bootstrap3> E email<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E <div class="input-group">
django-crispy-bootstrap3> E - <input aria-describedby="id_email_helptext" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text" value="invalidemail"><span class="input-group-addon">
django-crispy-bootstrap3> E ? ^
django-crispy-bootstrap3> E + <input aria-describedby="id_email_helptext id_email_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text" value="invalidemail"><span class="input-group-addon">
django-crispy-bootstrap3> E ? ^^^^^^^^^^^^^^^^
django-crispy-bootstrap3> E whatever
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </div><span class="help-block" id="error_1_id_email">
django-crispy-bootstrap3> E <strong>
django-crispy-bootstrap3> E Enter a valid email address.
django-crispy-bootstrap3> E </strong>
django-crispy-bootstrap3> E </span><div class="help-block" id="hint_id_email">
django-crispy-bootstrap3> E Insert your email
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group has-error" id="div_id_first_name">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_first_name">
django-crispy-bootstrap3> E first name<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E <div class="input-group">
django-crispy-bootstrap3> E <span class="input-group-addon">
django-crispy-bootstrap3> E blabla
django-crispy-bootstrap3> E - </span><input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text" value="first_name_too_long">
django-crispy-bootstrap3> E + </span><input aria-describedby="id_first_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text" value="first_name_too_long">
django-crispy-bootstrap3> E ? +++++++++++++++++++++++++++++++++++++++
django-crispy-bootstrap3> E </div><span class="help-block" id="error_1_id_first_name">
django-crispy-bootstrap3> E <strong>
django-crispy-bootstrap3> E Ensure this value has at most 5 characters (it has 19).
django-crispy-bootstrap3> E </strong>
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group has-error" id="div_id_last_name">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_last_name">
django-crispy-bootstrap3> E last name<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E <div class="input-group">
django-crispy-bootstrap3> E <span class="input-group-addon">
django-crispy-bootstrap3> E foo
django-crispy-bootstrap3> E - </span><input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text" value="last_name_too_long"><span class="input-group-addon">
django-crispy-bootstrap3> E + </span><input aria-describedby="id_last_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text" value="last_name_too_long"><span class="input-group-addon">
django-crispy-bootstrap3> E ? ++++++++++++++++++++++++++++++++++++++
django-crispy-bootstrap3> E bar
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </div><span class="help-block" id="error_1_id_last_name">
django-crispy-bootstrap3> E <strong>
django-crispy-bootstrap3> E Ensure this value has at most 5 characters (it has 18).
django-crispy-bootstrap3> E </strong>
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group" id="div_id_password1">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_password1">
django-crispy-bootstrap3> E password<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E <div class="input-group">
django-crispy-bootstrap3> E <input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password"><span class="input-group-addon">
django-crispy-bootstrap3> E whatever
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div><div class="form-group" id="div_id_password2">
django-crispy-bootstrap3> E <label class="control-label requiredField" for="id_password2">
django-crispy-bootstrap3> E re-enter password<span class="asteriskField">
django-crispy-bootstrap3> E *
django-crispy-bootstrap3> E </span>
django-crispy-bootstrap3> E </label><div class="controls">
django-crispy-bootstrap3> E <div class="input-group">
django-crispy-bootstrap3> E <span class="input-group-addon">
django-crispy-bootstrap3> E blabla
django-crispy-bootstrap3> E </span><input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </div>
django-crispy-bootstrap3> E </form>
django-crispy-bootstrap3>
django-crispy-bootstrap3> tests/test_form_helper.py:555: AssertionError
django-crispy-bootstrap3> =========================== short test summary info ============================
django-crispy-bootstrap3> FAILED tests/test_form_helper.py::test_form_show_errors_non_field_errors - assert <form method="post">\n<div class="alert alert-block alert-danger">\n<ul>\n<li>\nPasswords dont match\n</li>\n</ul>\n</div><div class="form-group">\n<div class="checkbox" id="div_id_is_company">\n<label class="" for="id_is_company">\n<input class="checkboxinput" id="id_is_company" name="is_company" type="checkbox">company\n</label>\n</div>\n</div><div class="form-group has-error" id="div_id_email">\n<label class="control-label requiredField" for="id_email">\nemail<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-describedby="id_email_helptext id_email_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text"><span class="help-block" id="error_1_id_email">\n<strong>\nThis field is required.\n</strong>\n</span><div class="help-block" id="hint_id_email">\nInsert your email\n</div>\n</div>\n</div><div class="form-group" id="div_id_password1">\n<label class="control-label requiredField" for="id_password1">\npassword<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password">\n</div>\n</div><div class="form-group" id="div_id_password2">\n<label class="control-label requiredField" for="id_password2">\nre-enter password<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">\n</div>\n</div><div class="form-group has-error" id="div_id_first_name">\n<label class="control-label requiredField" for="id_first_name">\nfirst name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-describedby="id_first_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text"><span class="help-block" id="error_1_id_first_name">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_last_name">\n<label class="control-label requiredField" for="id_last_name">\nlast name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-describedby="id_last_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text"><span class="help-block" id="error_1_id_last_name">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_datetime_field">\n<label class="control-label requiredField">\ndate time<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-invalid="true" class="dateinput" id="id_datetime_field_0" name="datetime_field_0" required type="text"><input aria-invalid="true" class="timeinput" id="id_datetime_field_1" name="datetime_field_1" required type="text"><span class="help-block" id="error_1_id_datetime_field">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div>\n</form> == <form method="post">\n<div class="alert alert-block alert-danger">\n<ul>\n<li>\nPasswords dont match\n</li>\n</ul>\n</div><div class="form-group">\n<div class="checkbox" id="div_id_is_company">\n<label class="" for="id_is_company">\n<input class="checkboxinput" id="id_is_company" name="is_company" type="checkbox">company\n</label>\n</div>\n</div><div class="form-group has-error" id="div_id_email">\n<label class="control-label requiredField" for="id_email">\nemail<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-describedby="id_email_helptext" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text"><span class="help-block" id="error_1_id_email">\n<strong>\nThis field is required.\n</strong>\n</span><div class="help-block" id="hint_id_email">\nInsert your email\n</div>\n</div>\n</div><div class="form-group" id="div_id_password1">\n<label class="control-label requiredField" for="id_password1">\npassword<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password">\n</div>\n</div><div class="form-group" id="div_id_password2">\n<label class="control-label requiredField" for="id_password2">\nre-enter password<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">\n</div>\n</div><div class="form-group has-error" id="div_id_first_name">\n<label class="control-label requiredField" for="id_first_name">\nfirst name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text"><span class="help-block" id="error_1_id_first_name">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_last_name">\n<label class="control-label requiredField" for="id_last_name">\nlast name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text"><span class="help-block" id="error_1_id_last_name">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_datetime_field">\n<label class="control-label requiredField">\ndate time<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<input aria-invalid="true" class="dateinput" id="id_datetime_field_0" name="datetime_field_0" required type="text"><input aria-invalid="true" class="timeinput" id="id_datetime_field_1" name="datetime_field_1" required type="text"><span class="help-block" id="error_1_id_datetime_field">\n<strong>\nThis field is required.\n</strong>\n</span>\n</div>\n</div>\n</form>
django-crispy-bootstrap3>
django-crispy-bootstrap3> Full diff:
django-crispy-bootstrap3> <form method="post">
django-crispy-bootstrap3> <div class="alert alert-block alert-danger">
django-crispy-bootstrap3> <ul>
django-crispy-bootstrap3> <li>
django-crispy-bootstrap3> Passwords dont match
django-crispy-bootstrap3> </li>
django-crispy-bootstrap3> </ul>
django-crispy-bootstrap3> </div><div class="form-group">
django-crispy-bootstrap3> <div class="checkbox" id="div_id_is_company">
django-crispy-bootstrap3> <label class="" for="id_is_company">
django-crispy-bootstrap3> <input class="checkboxinput" id="id_is_company" name="is_company" type="checkbox">company
django-crispy-bootstrap3> </label>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group has-error" id="div_id_email">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_email">
django-crispy-bootstrap3> email<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> - <input aria-describedby="id_email_helptext" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text"><span class="help-block" id="error_1_id_email">
django-crispy-bootstrap3> ? ^
django-crispy-bootstrap3> + <input aria-describedby="id_email_helptext id_email_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text"><span class="help-block" id="error_1_id_email">
django-crispy-bootstrap3> ? ^^^^^^^^^^^^^^^^
django-crispy-bootstrap3> <strong>
django-crispy-bootstrap3> This field is required.
django-crispy-bootstrap3> </strong>
django-crispy-bootstrap3> </span><div class="help-block" id="hint_id_email">
django-crispy-bootstrap3> Insert your email
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group" id="div_id_password1">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_password1">
django-crispy-bootstrap3> password<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> <input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password">
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group" id="div_id_password2">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_password2">
django-crispy-bootstrap3> re-enter password<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> <input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group has-error" id="div_id_first_name">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_first_name">
django-crispy-bootstrap3> first name<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> - <input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text"><span class="help-block" id="error_1_id_first_name">
django-crispy-bootstrap3> + <input aria-describedby="id_first_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text"><span class="help-block" id="error_1_id_first_name">
django-crispy-bootstrap3> ? +++++++++++++++++++++++++++++++++++++++
django-crispy-bootstrap3> <strong>
django-crispy-bootstrap3> This field is required.
django-crispy-bootstrap3> </strong>
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group has-error" id="div_id_last_name">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_last_name">
django-crispy-bootstrap3> last name<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> - <input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text"><span class="help-block" id="error_1_id_last_name">
django-crispy-bootstrap3> + <input aria-describedby="id_last_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text"><span class="help-block" id="error_1_id_last_name">
django-crispy-bootstrap3> ? ++++++++++++++++++++++++++++++++++++++
django-crispy-bootstrap3> <strong>
django-crispy-bootstrap3> This field is required.
django-crispy-bootstrap3> </strong>
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group has-error" id="div_id_datetime_field">
django-crispy-bootstrap3> <label class="control-label requiredField">
django-crispy-bootstrap3> date time<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> <input aria-invalid="true" class="dateinput" id="id_datetime_field_0" name="datetime_field_0" required type="text"><input aria-invalid="true" class="timeinput" id="id_datetime_field_1" name="datetime_field_1" required type="text"><span class="help-block" id="error_1_id_datetime_field">
django-crispy-bootstrap3> <strong>
django-crispy-bootstrap3> This field is required.
django-crispy-bootstrap3> </strong>
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </form>
django-crispy-bootstrap3> FAILED tests/test_form_helper.py::test_bootstrap_form_show_errors_bs3 - assert <form method="post">\n<div class="form-group has-error" id="div_id_email">\n<label class="control-label requiredField" for="id_email">\nemail<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<input aria-describedby="id_email_helptext id_email_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text" value="invalidemail"><span class="input-group-addon">\nwhatever\n</span>\n</div><span class="help-block" id="error_1_id_email">\n<strong>\nEnter a valid email address.\n</strong>\n</span><div class="help-block" id="hint_id_email">\nInsert your email\n</div>\n</div>\n</div><div class="form-group has-error" id="div_id_first_name">\n<label class="control-label requiredField" for="id_first_name">\nfirst name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nblabla\n</span><input aria-describedby="id_first_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text" value="first_name_too_long">\n</div><span class="help-block" id="error_1_id_first_name">\n<strong>\nEnsure this value has at most 5 characters (it has 19).\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_last_name">\n<label class="control-label requiredField" for="id_last_name">\nlast name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nfoo\n</span><input aria-describedby="id_last_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text" value="last_name_too_long"><span class="input-group-addon">\nbar\n</span>\n</div><span class="help-block" id="error_1_id_last_name">\n<strong>\nEnsure this value has at most 5 characters (it has 18).\n</strong>\n</span>\n</div>\n</div><div class="form-group" id="div_id_password1">\n<label class="control-label requiredField" for="id_password1">\npassword<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password"><span class="input-group-addon">\nwhatever\n</span>\n</div>\n</div>\n</div><div class="form-group" id="div_id_password2">\n<label class="control-label requiredField" for="id_password2">\nre-enter password<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nblabla\n</span><input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">\n</div>\n</div>\n</div>\n</form> == <form method="post">\n<div class="form-group has-error" id="div_id_email">\n<label class="control-label requiredField" for="id_email">\nemail<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<input aria-describedby="id_email_helptext" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text" value="invalidemail"><span class="input-group-addon">\nwhatever\n</span>\n</div><span class="help-block" id="error_1_id_email">\n<strong>\nEnter a valid email address.\n</strong>\n</span><div class="help-block" id="hint_id_email">\nInsert your email\n</div>\n</div>\n</div><div class="form-group has-error" id="div_id_first_name">\n<label class="control-label requiredField" for="id_first_name">\nfirst name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nblabla\n</span><input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text" value="first_name_too_long">\n</div><span class="help-block" id="error_1_id_first_name">\n<strong>\nEnsure this value has at most 5 characters (it has 19).\n</strong>\n</span>\n</div>\n</div><div class="form-group has-error" id="div_id_last_name">\n<label class="control-label requiredField" for="id_last_name">\nlast name<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nfoo\n</span><input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text" value="last_name_too_long"><span class="input-group-addon">\nbar\n</span>\n</div><span class="help-block" id="error_1_id_last_name">\n<strong>\nEnsure this value has at most 5 characters (it has 18).\n</strong>\n</span>\n</div>\n</div><div class="form-group" id="div_id_password1">\n<label class="control-label requiredField" for="id_password1">\npassword<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password"><span class="input-group-addon">\nwhatever\n</span>\n</div>\n</div>\n</div><div class="form-group" id="div_id_password2">\n<label class="control-label requiredField" for="id_password2">\nre-enter password<span class="asteriskField">\n*\n</span>\n</label><div class="controls">\n<div class="input-group">\n<span class="input-group-addon">\nblabla\n</span><input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">\n</div>\n</div>\n</div>\n</form>
django-crispy-bootstrap3>
django-crispy-bootstrap3> Full diff:
django-crispy-bootstrap3> <form method="post">
django-crispy-bootstrap3> <div class="form-group has-error" id="div_id_email">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_email">
django-crispy-bootstrap3> email<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> <div class="input-group">
django-crispy-bootstrap3> - <input aria-describedby="id_email_helptext" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text" value="invalidemail"><span class="input-group-addon">
django-crispy-bootstrap3> ? ^
django-crispy-bootstrap3> + <input aria-describedby="id_email_helptext id_email_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_email" maxlength="30" name="email" required type="text" value="invalidemail"><span class="input-group-addon">
django-crispy-bootstrap3> ? ^^^^^^^^^^^^^^^^
django-crispy-bootstrap3> whatever
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </div><span class="help-block" id="error_1_id_email">
django-crispy-bootstrap3> <strong>
django-crispy-bootstrap3> Enter a valid email address.
django-crispy-bootstrap3> </strong>
django-crispy-bootstrap3> </span><div class="help-block" id="hint_id_email">
django-crispy-bootstrap3> Insert your email
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group has-error" id="div_id_first_name">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_first_name">
django-crispy-bootstrap3> first name<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> <div class="input-group">
django-crispy-bootstrap3> <span class="input-group-addon">
django-crispy-bootstrap3> blabla
django-crispy-bootstrap3> - </span><input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text" value="first_name_too_long">
django-crispy-bootstrap3> + </span><input aria-describedby="id_first_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_first_name" maxlength="5" name="first_name" required type="text" value="first_name_too_long">
django-crispy-bootstrap3> ? +++++++++++++++++++++++++++++++++++++++
django-crispy-bootstrap3> </div><span class="help-block" id="error_1_id_first_name">
django-crispy-bootstrap3> <strong>
django-crispy-bootstrap3> Ensure this value has at most 5 characters (it has 19).
django-crispy-bootstrap3> </strong>
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group has-error" id="div_id_last_name">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_last_name">
django-crispy-bootstrap3> last name<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> <div class="input-group">
django-crispy-bootstrap3> <span class="input-group-addon">
django-crispy-bootstrap3> foo
django-crispy-bootstrap3> - </span><input aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text" value="last_name_too_long"><span class="input-group-addon">
django-crispy-bootstrap3> + </span><input aria-describedby="id_last_name_error" aria-invalid="true" class="form-control inputtext textInput textinput" id="id_last_name" maxlength="5" name="last_name" required type="text" value="last_name_too_long"><span class="input-group-addon">
django-crispy-bootstrap3> ? ++++++++++++++++++++++++++++++++++++++
django-crispy-bootstrap3> bar
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </div><span class="help-block" id="error_1_id_last_name">
django-crispy-bootstrap3> <strong>
django-crispy-bootstrap3> Ensure this value has at most 5 characters (it has 18).
django-crispy-bootstrap3> </strong>
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group" id="div_id_password1">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_password1">
django-crispy-bootstrap3> password<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> <div class="input-group">
django-crispy-bootstrap3> <input class="form-control textInput textinput" id="id_password1" maxlength="30" name="password1" required type="password"><span class="input-group-addon">
django-crispy-bootstrap3> whatever
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div><div class="form-group" id="div_id_password2">
django-crispy-bootstrap3> <label class="control-label requiredField" for="id_password2">
django-crispy-bootstrap3> re-enter password<span class="asteriskField">
django-crispy-bootstrap3> *
django-crispy-bootstrap3> </span>
django-crispy-bootstrap3> </label><div class="controls">
django-crispy-bootstrap3> <div class="input-group">
django-crispy-bootstrap3> <span class="input-group-addon">
django-crispy-bootstrap3> blabla
django-crispy-bootstrap3> </span><input class="form-control textInput textinput" id="id_password2" maxlength="30" name="password2" required type="password">
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </div>
django-crispy-bootstrap3> </form>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment