Django自定义登录表单未显示输入字段问题求助
问题修复方案
根因
你在调用render方法渲染登录模板时,没有将实例化后的form对象传入模板上下文,导致模板中{{ form.username }}、{{ form.password }}对应的变量为空,因此不会渲染输入字段。同时你贴出的视图代码存在缩进错误,会导致运行报错。
修复步骤
- 第一步:修正
views.py中render函数的上下文传参,将实例化后的form对象传入
原错误代码:
return render(response, "registration/login.html",{})
修改后代码:
return render(response, "registration/login.html", {"form": form})
- 第二步:修正视图函数的缩进问题,同时建议增加用户存在性判断避免报错,修正后的完整视图代码参考:
# 惯例将视图第一个参数命名为request,你原写法用response也可运行但容易混淆 def login(request): if request.method == "POST": form = LoginForm(request.POST) if form.is_valid(): username = form.cleaned_data.get("username") password = form.cleaned_data.get("password") user = authenticate(username=username, password=password) # 增加非空判断,避免用户名密码错误时调用auth_login报错 if user is not None: auth_login(request,user) return redirect("home") else: form = LoginForm() return render(request, "registration/login.html", {"form": form})
额外排查项
如果完成上述修改后问题仍存在,可检查以下两点:
- 确认你定义的
LoginForm是否正确声明了username、password两个表单字段,是否继承了Django的forms.Form或者django.contrib.auth.forms.AuthenticationForm - 如果你的
login.html是继承母版的子模板,确认模板开头添加了{% extends '你的母版文件路径.html' %}声明,否则{% block content %}包裹的内容不会正常渲染
内容的提问来源于stack exchange,提问作者Moritz_1201
相关产品推荐
相关产品推荐

