未由auth_views.LoginView呈现的Django表单

时间:2018-08-22 22:57:23

标签: django login

我有一个问题,就是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一起显示

对不起,我的英语。

1 个答案:

答案 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方法。