如何在Django的内置密码验证错误中显示“标签”字段?

问题描述

我正在使用Django的内置身份验证类视图,并且需要自定义密码验证失败时显示错误消息。

例如,在内置的 PasswordResetView 中,如果我尝试将密码更改为 test ,则以下错误显示在我的模板:

  • new_password2

    • 密码太短。它必须至少包含8个字符。
    • 密码太常见了。

我想将 new_password2 更改为 New Password

这是我的 PasswordResetView 模板的相关部分:

{% extends 'registration/base.html' %}

{% block card_body %}
  <div class="form-group">
    <label for="old_password">
      Old Password:
      {{ form.old_password }}
    </label>
  </div>
  <div class="form-group">
    <label for="new_password1">
      New Password:
      {{ form.new_password1 }}
    </label>
  </div>
  <div class="form-group">
    <label for="new_password2">
      Confirm Password:
      {{ form.new_password2 }}
    </label>
  </div>
  <div class="form-group">
    <input type="submit" value="Change" class="btn float-right login_btn">
  </div>
{% endblock card_body %}
{% block card_footer %}
  {% if form.errors %}
    <p class="d-flex justify-content-center links">
      {{ form.errors }}
    </p>
  {% endif %}
{% endblock card_footer %}

解决方法

  1. 向模板提供一些字典,该字典会将表单字段名称映射到您想要的标签:

    fields_mapping = {
      'old_password': 'Old password','new_password1': 'New password','new_password2': 'Confirm password'
    }
    
  2. 只需手动遍历错误并使用映射dic将字段名称转换为所需的标签:

    {% for field_name in form.errors: %}
      {{ fields_mapping[field_name] }}:
      {% for err_message in form.errors[field_name]: %}
        * {{ err_message }}
      {% endfor %}
    {% endfor %}
    

在那里随意定制HTML / CSS