【问题标题】:Displaying Django error messages in templates? - Not working在模板中显示 Django 错误消息? - 不工作
【发布时间】:2017-03-11 07:38:09
【问题描述】:

我有两个表单 login.html 和 register.html,我遵循相同的方法在模板中显示错误,但不起作用。

登录.html

<form method="post" action="" class="ui large form">
{% csrf_token %}

  <div class="ui stacked segment">
    {% if not form.non_field_errors %}
    <div class="required field">
      <label>Emailaddress</label>
        {{ form.username }}              
    </div>
    {% endif %}

    {% if form.non_field_errors %}
    <div class="required field error">
      <label>Emailaddress</label>
        {{ form.username }}              
    </div>
    {% endif %}

    {% if not form.non_field_errors %}
    <div class="required field">
      <label>Password</label>
        {{ form.password }}              
    </div>
    {% endif %}

    {% if form.non_field_errors %}
    <div class="required field error">
      <label>Password</label>
        {{ form.password }}              
    </div>
    {% endif %}

    <small><p>{{ form.non_field_errors }}</p></small>


    <input type="submit" name="" class="ui fluid large teal submit button" value="login">



  </div>

</form>

输出截图:

Non Error output

Error output

注册.html

<form method="post" action="" class="ui large form">
{% csrf_token %}
  <div class="ui stacked segment">
    {% if not form.non_field_errors %}
    <div class="required field">
      <label>Emailaddress</label>
      {{ form.email }}
    </div>
    {% endif %}

    {% if form.non_field_errors %}
    <div class="required field error">
      <label>Emailaddress</label>
      {{ form.email }}
      <p>{{ form.email.errors }}</p>
    </div>
    {% endif %}

    {% if not form.non_field_errors %}
    <div class="required field">
      <label>Password</label>
      {{ form.password1 }}
    </div>
    {% endif %}

    {% if form.non_field_errors %}
    <div class="required field error">
      <label>Password</label>
      {{ form.password1 }}
      <p>{{ form.password1.errors }}</p>
    </div>
    {% endif %}

    {% if not form.non_field_errors %}
    <div class="required field">
      <label>Confirm Password</label>
      {{ form.password2 }}
    </div>
    {% endif %}

    {% if form.non_field_errors %}
    <div class="required field error">
      <label>Confirm Password</label>
      {{ form.password2 }}
      <p>{{ form.password2.errors }}</p>
    </div>
    {% endif %}
     <small><p>{{ form.non_field_errors }}</p></small>

    <input type="submit" name="" class="ui fluid large teal submit button" value="Sign Up">
  </div>

</form>

这次我没有显示任何错误消息。我做错了什么?

【问题讨论】:

  • 发表你的观点也要清楚哪个模板不起作用
  • register.html 可以正常工作.. 但是在错误类中时不显示错误消息..
  • 这就是编辑您的问题以显示登录和注册视图。它会很容易调试。

标签: python html django django-templates


【解决方案1】:

non_field_errors(),顾名思义,显示与字段无关的错误 (docs)。

请注意,由您的 Form.clean() 覆盖引发的任何错误都不会与任何特定字段相关联。它们进入一个特殊的“字段”(称为all),如果需要,您可以通过 non_field_errors() 方法访问。

您不应该将其用作特定字段是否有错误的逻辑。你应该这样做:

{% if not form.email.errors %}
    <div class="required field">
      <label>Emailaddress</label>
      {{ form.email }}
    </div>
{% endif %}

然后在您的login.html 中,您不会像在register.html 中那样渲染{{ field.errors }}

{% if form.non_field_errors %}
    <div class="required field error">
      <label>Emailaddress</label>
        {{ form.username }}

      {# This is missing #}
      <p>{{ form.username.errors }}</p>    

    </div>
{% endif %}

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 2019-07-17
    • 2016-04-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多