首页 > 解决方案 > 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 不显示电子邮件字段

对不起我的英语不好。

标签: djangologin

解决方案


看起来您正在使用第三方插件来呈现单个表单字段(我假设您已经{% 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 方式。


推荐阅读