表单成功重定向后,如何在HTML页面检测状态并显示提示?
解决方案
你可以通过两种可靠的方式实现需求,不推荐检测来源URL的方式(HTTP_REFERER易被浏览器禁用或篡改,稳定性差):
方法一:通过URL查询参数传递状态
修改密码修改视图的成功跳转URL,附加状态参数,在登录模板中直接读取该参数:
- 更新
views.py中的ChangePasswordView:
class ChangePasswordView(PasswordChangeView): form_class = ChangePasswordForm def get_success_url(self): # 跳转登录页时附加密码修改成功的标识参数 return f"{reverse_lazy('login')}?password_changed=1"
- 修改
login.html模板:
{% if request.GET.password_changed %} <p style="color:green;">Password changed successfully! Please login.</p> {% endif %}
方法二:使用Django消息框架(更优雅的方案)
利用Django内置的消息框架传递提示信息,避免状态暴露在URL中:
- 确保项目
settings.py已启用消息中间件(默认配置通常已包含):
MIDDLEWARE = [ # ... 其他中间件 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', # ... ]
- 更新
views.py中的ChangePasswordView,添加成功消息:
from django.contrib import messages class ChangePasswordView(PasswordChangeView): form_class = ChangePasswordForm success_url = reverse_lazy("login") def form_valid(self, form): response = super().form_valid(form) # 添加密码修改成功的提示消息 messages.success(self.request, "Password changed successfully! Please login.") return response
- 修改
login.html模板渲染消息:
{% if messages %} {% for message in messages %} <p style="color:green;">{{ message }}</p> {% endfor %} {% endif %}
内容的提问来源于stack exchange,提问作者Adryan Zeigler
相关产品推荐
相关产品推荐

