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

在Django Crispy Form中修改登录视图的用户名与密码标签

修改Django Crispy Forms登录视图的字段标签

嘿,我来帮你搞定这个问题!你猜的没错,我们可以通过扩展Django内置的认证表单来修改用户名和密码的标签,不用完全重写表单。下面给你两种可行的方案:

方案1:自定义登录表单(推荐,可复用)

这个方法最优雅,适合后续在多个地方复用修改后的表单。步骤如下:

  1. 在你的users应用下创建forms.py文件(如果还没有的话),写入以下代码:
from django.contrib.auth.forms import AuthenticationForm

class CustomLoginForm(AuthenticationForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 在这里自定义你的标签文本
        self.fields['username'].label = '自定义用户名'
        self.fields['password'].label = '自定义密码'
  1. 修改urls.py里的LoginView配置,指定使用我们的自定义表单:
# 先导入自定义表单
from .forms import CustomLoginForm

path('login/', auth_views.LoginView.as_view(
    template_name='users/login.html',
    form_class=CustomLoginForm  # 添加这一行,指定自定义表单
), name='login'),

这样修改后,Crispy Forms会自动使用你设置的新标签渲染表单,完全不用改模板代码,是不是很方便?

方案2:直接在模板中修改(快速临时方案)

如果你只是想快速修改单个模板的标签,也可以直接在login.html里手动替换标签:

{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
    <form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">Login</legend>
            <!-- 手动替换用户名标签 -->
            <div class="form-group">
                <label for="{{ form.username.id_for_label }}">自定义用户名</label>
                {{ form.username|as_crispy_field }}
            </div>
            <!-- 手动替换密码标签 -->
            <div class="form-group">
                <label for="{{ form.password.id_for_label }}">自定义密码</label>
                {{ form.password|as_crispy_field }}
            </div>
        </fieldset>
        <div class="form-group">
            <button type="submit" class="btn btn-outline-info">Login</button>
        </div>
    </form>
    <div class="border-top pt-3">
        <small class="text-muted">Don't have an account? <a class="ml-2" href="{% url 'register' %}">Register</a></small>
    </div>
</div>
{% endblock content %}

这个方法不用修改Python代码,但缺点是无法复用,如果你以后在其他地方用到登录表单,还要重复修改模板。

两种方案都能解决你的问题,推荐用第一种,更符合Django的最佳实践哦!

内容的提问来源于stack exchange,提问作者Franciszek Job

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:52:40