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

如何为Django Crispy-form表单标签添加Bootstrap加粗/下划线样式

问题描述

我正在使用Django v5和Bootstrap v5开发小型项目,当前调试注册和登录页面,想用crispy-forms的FormHelper组件美化表单。已经成功修改标签显示文本,但无法给必填字段(比如username标签)设置加粗和下划线样式,想替代crispy默认的星号标识,目标是用Bootstrap的fw-bold和text-decoration-underline类。

现有代码

forms.py

from django import forms
from django.contrib.auth import get_user_model
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Field, Layout

class LoginForm(forms.Form):
    username = forms.CharField(widget=forms.TextInput(attrs={'autofocus': 'autofocus'}))
    password = forms.CharField(widget = forms.PasswordInput)

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(
        label = 'Password',
        widget = forms.PasswordInput
    )
    password2 = forms.CharField(
        label = 'Repeat password',
        widget = forms.PasswordInput
    )

    class Meta:
        model = get_user_model()
        fields = ['username','email','first_name','last_name']
        widgets = {
            "username": forms.TextInput(attrs={'autofocus': 'autofocus'}),
        }

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError("Passwords don't match!")
        return cd['password2']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.fields['username'].label= "User Name"
        self.fields['username'].help_text= "This will be your Login ID and must be unique"
        #self.helper.layout = Layout(
            #Field('username', label='User Name - Doug', css_class="fs-2")
        #)

        self.helper.add_input(Submit('submit', 'Register'))

注:注释部分仅修改了input的样式,而非label。

register.html

{% extends "registration/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<h2>Registration Form</h2>
<div class="content-section">
    <form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
                {%  crispy form %}
        </fieldset>
        <div class="pb-4">
            <small class="text-muted">Required fields are marked by *</small>
        </div>
    </form>
</div>
{% endblock %}

解决方案

方法1:动态遍历字段添加标签样式(推荐)

无需手动指定每个字段,自动给所有必填字段的标签添加样式,同时隐藏默认星号:

修改UserRegistrationForm的__init__方法:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.helper = FormHelper()
    self.fields['username'].label= "User Name"
    self.fields['username'].help_text= "This will be your Login ID and must be unique"
    
    # 关闭Crispy默认的必填星号标识
    self.helper.form_show_required = False
    
    # 遍历所有字段,给必填字段的标签添加Bootstrap样式类
    for field_name, field in self.fields.items():
        if field.required:
            field.label_classes = 'fw-bold text-decoration-underline'
    
    self.helper.add_input(Submit('submit', 'Register'))

方法2:通过Layout手动指定字段标签样式

如果需要针对特定字段单独设置,可以用Layout组件逐个定义:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.helper = FormHelper()
    self.fields['username'].label= "User Name"
    self.fields['username'].help_text= "This will be your Login ID and must be unique"
    
    # 关闭默认星号
    self.helper.form_show_required = False
    
    # 自定义布局,给指定字段标签加样式
    self.helper.layout = Layout(
        Field('username', label_class='fw-bold text-decoration-underline'),
        Field('email', label_class='fw-bold text-decoration-underline'),
        Field('first_name'),
        Field('last_name'),
        Field('password', label_class='fw-bold text-decoration-underline'),
        Field('password2', label_class='fw-bold text-decoration-underline'),
        Submit('submit', 'Register')
    )

最后更新模板提示

修改register.html里的提示文字,匹配新的标识方式:

<div class="pb-4">
    <small class="text-muted">Required fields are bold and underlined</small>
</div>

内容的提问来源于stack exchange,提问作者Doug Conran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:10:55