如何覆盖 django AuthenticationForm 输入 css 类?

Posted

技术标签:

【中文标题】如何覆盖 django AuthenticationForm 输入 css 类?【英文标题】:How can I override the django AuthenticationForm input css class? 【发布时间】:2011-01-21 07:33:10 【问题描述】:

我有一个使用基本 django 注册框架的 django 站点。我的登录页面工作正常,但我想更改输入的 css 类。传递给登录页面的表单看起来是一个 AuthenticationForm 类。

向用户名和密码字段添加 css 类的好方法是什么?

【问题讨论】:

【参考方案1】:

子类你的身份验证表单

forms.py

​​>
from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.forms.widgets import PasswordInput, TextInput

class RFPAuthForm(AuthenticationForm):
    username = forms.CharField(widget=TextInput(attrs='class': 'span2','placeholder': 'Email'))
    password = forms.CharField(widget=PasswordInput(attrs='class': 'span2','placeholder':'Password'))

【讨论】:

如果你只需要添加一个类,也可以试试github.com/kmike/django-widget-tweaks。 AuthenticationForm 中的用户名字段有max_langth=254 specified。你认为我也应该将此值添加到我的字段中吗?那些被我的声明覆盖了吗?【参考方案2】:

我做你想做的事:

def login(request):
    form = AuthenticationForm(request)
    form.fields['username'].widget.attrs['class'] = "custom_css"
    form.fields['password'].widget.attrs['style'] = "background:red"
    return render_to_response("login.html", 'form':form,
                          context_instance=RequestContext(request))

【讨论】:

如果我正在使用 django.contrib.auth.views.login 并且我想在我的网站的每个页面上包含表单怎么办?我看不到我包含在 base.html 中的登录表单,我认为这是因为我无法将 django.contrib.auth.views.login 的 AuthenticationForm 连接到我的 CSS 文件。你怎么看? 1.你可以制作一个模板标签,比如 % get_login_form % 2.您可以扩展 auth 表单并覆盖 init 方法以放置 attrs。

以上是关于如何覆盖 django AuthenticationForm 输入 css 类?的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖默认的 django 忘记密码模板?

Django如何覆盖默认表单错误消息

如何在 Django 中覆盖“get_queryset()”

如何以 django 模型形式覆盖保存方法

用户注册后Django自动登录(1.4)

Django:如何覆盖 form.save()?