You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django登录表单设置Bootstrap form-control类样式不生效问题

问题根因

你在视图层没有实例化自定义的LogINFO表单类传入模板,而是直接使用了Django auth模块自带的AuthenticationForm,模板中渲染的{{ form.username }}、{{ form.password }}是auth自带表单的字段,你在自定义LogINFO里配置的所有widget属性自然完全不会生效。

修复方案

两种方案按需选择即可:

  • 方案1:视图层替换为自定义表单
    如果你要使用自己编写的LogINFO表单,在登录视图中实例化这个类传入模板上下文即可,注意自行补全登录校验逻辑,参考代码:
# views.py
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from .forms import LogINFO

def login_view(request):
    if request.method == "POST":
        form = LogINFO(request.POST)
        if form.is_valid():
            username = form.cleaned_data["username"]
            password = form.cleaned_data["password"]
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect("index") # 替换为登录成功后的跳转路由
    else:
        form = LogINFO()
    return render(request, "login.html", {"form": form})
  • 方案2:继承Django自带认证表单扩展样式(推荐)
    不需要从零编写表单、重复实现认证逻辑,只需要覆写自带AuthenticationForm的字段widget属性即可,修改forms.py:
# forms.py
from django import forms
from django.contrib.auth.forms import AuthenticationForm

class LoginForm(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'
        })
    )

如果你使用Django内置的LoginView,不需要额外编写视图,直接在路由配置中指定表单类即可:

# urls.py
from django.contrib.auth.views import LoginView
from .forms import LoginForm

urlpatterns = [
    # 其他路由配置
    path('login/', LoginView.as_view(
        form_class=LoginForm,
        template_name='login.html'
    ), name='login'),
]
额外检查项

如果修改表单后样式仍未生效,先确认模板中已经正确引入Bootstrap的CSS资源。另外你使用的form-floating浮动布局需要给输入框配套绑定label标签,否则浮动效果会异常,正确的模板片段参考:

<form method="post">
    {% csrf_token %}
    <div class="form-floating mb-3">
        {{ form.username }}
        <label for="{{ form.username.id_for_label }}">Username</label>
    </div>
    <div class="form-floating mb-3">
        {{ form.password }}
        <label for="{{ form.password.id_for_label }}">Password</label>
    </div>
    <button type="submit" class="btn btn-primary w-100">登录</button>
</form>

内容的提问来源于stack exchange,提问作者Mario A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:09:38