我有一个问题,就是Django无法呈现我的“登录”表单的字段之一。我正在使用auth_views.LoginView视图进行用户身份验证,即使我放置了模板,其中的一个字段也不会出现在html中。
Url.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'),
]
views.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})
forms.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一起显示
对不起,我的英语。
答案 0 :(得分:0)
您似乎正在使用第三方插件来呈现单个表单字段(我假设您在git checkout <branchname>
模板中使用了git checkout dev
。
也许尝试:
{% 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 %}
^我还添加了将属性传递到表单字段的Django方法。