Django中SetPasswordForm无法渲染任何内容的问题求助
问题原因
你在视图中直接将SetPasswordForm类本身传递到了模板上下文,没有生成表单类的实例。Django模板只能渲染表单实例的字段,直接调用表单类的属性不会生成对应的输入控件。此外SetPasswordForm要求必须传入当前登录用户作为实例化的第一个必填参数,否则后续提交密码修改逻辑也会报错。
你之前打印form.base_fields能正常输出是因为base_fields是表单类的类属性,直接用类访问即可正常获取,但表单的字段渲染逻辑绑定在实例上,必须完成实例化操作才能正常生成HTML输入标签。
修正方案
修改views.py中的视图逻辑,正确实例化表单:
from django.contrib.auth.forms import SetPasswordForm from django.contrib import messages from django.shortcuts import redirect @login_required def profile_security(request): template = "profiles/profile_security.html" if request.method == 'POST': # POST请求时绑定用户和提交的表单数据 form = SetPasswordForm(user=request.user, data=request.POST) if form.is_valid(): form.save() messages.success(request, "密码修改成功") return redirect("profile_security") else: # GET请求时实例化空表单 form = SetPasswordForm(user=request.user) context = { "profile_index_active": "active", "underline_security": "text-underline", "form": form } return render(request, template, context)
你之前写的两种模板渲染写法都是正确的,修正视图逻辑后即可正常渲染出密码输入框。
内容的提问来源于stack exchange,提问作者Alejandro Veintimilla
相关产品推荐
相关产品推荐

