覆盖Django的AuthenticationForm字段

2024-05-05 20:59:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django的身份验证后端,它工作得很好,但我想为用户名和密码字段提供一个自定义CSS类。我一直在努力寻找解决办法,但我在这里或其他任何地方都找不到任何东西。这就是我到目前为止所做的:

project/forms.py:

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class LoginForm(AuthenticationForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control form-control-lg'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control form-control-lg'}))

project/url.py:

from django.contrib import admin
from django.urls import path, include
from .forms import LoginForm

urlpatterns = [
    path('accounts/', include('django.contrib.auth.urls'), {'authentication_form': LoginForm}),
]

accounts/login.html:

<form method="POST">
    {% csrf_token %}
    <div class="form-group">
        {{ form.username }}
        {{ form.password }}
    <button type="submit" class="btn btn-primary btn-lg btn-block">Sign in</button>
</form>

登录系统正常工作,但我无法显示CSS更改。我检查了用户名和密码字段,但它们根本没有显示在浏览器中。我猜我在什么地方遗漏了什么


Tags: djangofromimportform密码地方formscontrib
2条回答

不知道如何直接完成,但我使用小部件调整来完成,它工作得很好(还可以完成所有错误通知)。您不需要在表单中设置任何内容,一切都在模板中完成。模板中的行将是:

    {% with "form-control input-field-"|add:form.username.name as field_class %}{% render_field form.username class=field_class %}{% endwith %}

这将为每个输入字段提供一个单独的类。看看https://github.com/jazzband/django-widget-tweaks

它不起作用的原因是,您添加的{'authentication_form':LoginForm}的路径中包含include(..),这是不可能的,您只需要将其传递到登录url(或覆盖该表单的url):

from django.contrib.auth.views import LoginView

urlpatterns = [
    path('accounts/login/', LoginView.as_view(authentication_form=LoginForm)),
    path('accounts/', include('django.contrib.auth.urls')),
]

相关问题 更多 >