django - 如何在 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>
解决方案
出现错误时尝试不重定向,如下所示:
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(...
当表单无效时,也会调用该行。
推荐阅读
- three.js - 如何正确提高 AR.js 处理分辨率?
- javascript - 将 VueJs 模态组件添加到 Laravel 模板
- python - 在 MultiIndexed DataFrame 中随机采样级别
- android - 启动应用时弹出 Android 默认锁屏
- ios - 从外部 xib/nib 文件导入的自定义按钮不响应按钮单击
- html - 当鼠标光标离开悬停区域时如何为图像提供动画?
- python - 如何纠正 for 循环中的错误(它说 print func 不能返回任何值)?
- android - 加载视频组件时,Android 上的 react-native-video 崩溃
- php - 使用 cloneBlock 生成克隆后替换块的内容 - PHPWord
- java - 方法有什么问题?