You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:06:04