首页 > 解决方案 > 如何在 Django 的 change_password 中显示错误消息

问题描述

我正在努力在 Django 的 change_password 中显示错误消息。

我尝试了所有我知道的在模板文件中显示错误的方法,但是当我故意输入一些错误信息时没有任何显示。我认为这是因为表单无效时重定向。但是,如果没有重定向,更改密码功能将不起作用。

谁能建议一种方法来做到这一点?

视图.py

def change_password(request):
    if request.method == 'POST':
        form = PasswordChangeForm(data=request.POST, user=request.user)

        if form.is_valid():
            form.save()
            update_session_auth_hash(request, form.user)
            return redirect('/accounts/profile')
        else:
            return redirect('/accounts/change-password')

    else:
        form = PasswordChangeForm(user=request.user)

        args = {'form': form}
        return render(request, 'accounts/change_password.html', args)

HTML 模板

<form method="POST">
    {% csrf_token %}
    <p class="error-message">
        {{ form.errors.old_password }}
        {{ form.errors.new_password1 }}
        {{ form.errors.new_password2 }}
        {{ form.non_field_errors }}
        {% if form.non_field_errors %}
            {% for error in form.non_field_errors %}
                {{ error }}
            {% endfor %}
        {% endif %}
    </p>
    <div class="form-group row">
        <label for="inputPassword" class="col-sm-3 col-form-label">Old Password</label>
        <div class="col-sm-9">
            <input type="password" class="form-control" name="old_password" placeholder="Old Password" required autofocus>
        </div>
    </div>
    <div class="form-group row">
        <label for="inputPassword" class="col-sm-3 col-form-label">New Password</label>
        <div class="col-sm-9">
            <input type="password" class="form-control" name="new_password1" placeholder="New Password" required>
        </div>
    </div>
    <div class="form-group row">
        <label for="inputPassword" class="col-sm-3 col-form-label">Confirm New Password</label>
        <div class="col-sm-9">
            <input type="password" class="form-control" name="new_password2" id="inputPassword" placeholder="Confirm New Password" required>
        </div>
    </div>

    <input class="btn btn-modvisor btn-block" type="submit" name="" value="Submit">
</form>

标签: django

解决方案


出现错误时尝试不重定向,如下所示:

def change_password(request):
    if request.method == 'POST':
        form = PasswordChangeForm(data=request.POST, user=request.user)

        if form.is_valid():
            form.save()
            update_session_auth_hash(request, form.user)
            return redirect('/accounts/profile')
    else:
        form = PasswordChangeForm(user=request.user)

    args = {'form': form}
    return render(request, 'accounts/change_password.html', args)

如您所见,return render(...当表单无效时,也会调用该行。


推荐阅读