Django sign in form, Bootstrap的样式化没有做任何事情



我在使用Django时遇到了一些麻烦。所以,我想使用Bootstrap的登录模板,并在我的项目中使用它。所以,我已经能够正确地做到这一点,除了用户名和密码字段,这是显示为常规的{{form.username}},即使我已经使用了表单控制类。我给你示范一下:

forms.py

from django import forms
from django.forms import TextInput, PasswordInput
class LogINFO(forms.Form):
username= forms.CharField(label= 'Usuario: ', max_length=20, widget=forms.TextInput(attrs={"placeholder": "Username", 'style': 'width: 300px;', "class": "form-control"}))
password=forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password', 'style': 'width: 300px;', 'class': 'form-control'}))

and mylogin.html

{% csrf_token %}
<div class="form-floating">
{{form.username}}
</div>
<div class="form-floating">
{{form.password}}
</div>

它显然省略了所有内容,只是作为常规表单输入显示。我没有使用模型,因为我正在使用验证应用程序。

像login这样的身份验证表单倾向于覆盖自定义,除非以特定的方式设置。

试试下面的

urls . py

from django.contrib.auth import views
from .forms import LogINFO
....
path('login/',
views.LoginView.as_view(
template_name="registration/login.html", #this is default, change as needed
authentication_form=LogINFO,
),
name='login'
),

views.py

from django.contrib.auth.forms import AuthenticationForm,
class LogINFO(AuthenticationForm):
username= forms.CharField(label= 'Usuario: ', max_length=20, widget=forms.TextInput(attrs={"placeholder": "Username", 'style': 'width: 300px;', "class": "form-control"}))
password=forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password', 'style': 'width: 300px;', 'class': 'form-control'}))
def __init__(self, *args, **kwargs):
super(LogINFO, self).__init__(*args, **kwargs) 

关键元素是:

  • 使你的表单成为AuthenticationForm类的子类(这是有意义的,因为你正在使用Django的auth)
  • 调用超级init函数(允许子类使用类的所有方法)
  • 和在url .py文件
  • 中提供authentication_form类

最后一个注意事项,当我为另一个应用程序(如django.config)重写模板时。在settings.py INSTALLED_APPS中,我将问题中的应用放在之前,以便它首先找到我的新模板。

最新更新