django - auth_views.LoginView 未呈现 Django 表单
问题描述
我有一个问题是 Django 没有呈现我的登录表单的字段之一。我正在使用 auth_views.LoginView 视图进行用户身份验证,即使我放置了模板,其中一个字段也不会出现在我的 html 中。
网址.py:
from django.urls import path, re_path
from django.contrib.auth import views as auth_views
from Turnos import views
urlpatterns = [
path('', views.home, name='home'),
与views.login 视图它完美地工作
#path('login/', views.login, name='login'),
使用 auth_views.LoginView.as_view(template_name='login.html') 不会呈现电子邮件字段
path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
]
视图.py:
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib.auth import login as auth_login
from Turnos.forms import loginForm
def login(request):
if request.method == 'POST':
form = loginForm(request.POST)
if form.is_valid():
user = form.save()
auth_login(request, user)
return redirect('nuevoTurno.html')
else:
form = loginForm()
return render(request, 'login.html', {'form': form})
表格.py:
from django import forms
from django.contrib.auth.models import User
class loginForm(forms.ModelForm):
email = forms.EmailField(required=True, widget=forms.EmailInput())
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
fields = ['email', 'password']
html:
<form action="/login/" method="post" novalidate>
{% csrf_token %}
<div class="form-group">
<label for="{{ form.email.label }}" class="">Email</label>
{% render_field form.email class+="form_control form-control-lg" placeholder="Email" %}
</div>
<div class="form-group">
<label for="{{ form.password.label }}" class="">Password</label>
{% render_field form.password placeholder="Password" class+="form_control form-control-lg" %}
</div>
<div class="form-group">
<button type="submit" class="btn btn-outline-light btn-block">
Enviar
</button>
</div>
<div class="form-group">
<a href="#" style="color: #fff">Lost password?</a>
</div>
</form>
auth_views.loginview 不显示电子邮件字段
对不起我的英语不好。
解决方案
看起来您正在使用第三方插件来呈现单个表单字段(我假设您已经{% load widget_tweaks %}
在base.html
模板中使用过。
也许尝试:
<form action="/your-name/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
...或者...
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
甚至...
{{ form.non_field_errors }}
<div class="form-group">
{{ form.email.errors }}
<label for="{{ form.email.id_for_label }}">Email</label>
{{ form.email }}
</div>
如果上述方法不起作用,那么是时候调试电子邮件无法通过的原因了。不确定这是否是订购的东西(不太可能):
email = forms.EmailField(widget=forms.EmailInput(), attrs={'class': "form_control form-control-lg", 'placeholder': "Email"}, required=True, )
^ 我还添加了将属性传递到表单字段的 Django 方式。
推荐阅读
- jenkins - Jenkins 中的 Java 10 代码部署失败(构建成功)
- java - 在 Maven 中使用类路径加载 bean 时遇到问题
- c# - 通过 ac# 程序在命令提示符下使用其 IP 地址关闭另一个系统?
- javascript - 单击打印按钮页面后重定向到另一个页面javascript
- java - 即使服务器停止,Clinet 也不会停止发送消息
- javascript - 为什么 let 不比 var 慢?
- unity3d - Unity 2D 轨迹渲染器碰撞
- reactjs - React:调用 this.setState() 后不会调用组件的 render()
- android - 使用 android studio kotlin 生成 UI
- python - 无法将我的按钮放在 tkinter 中的指定一侧