django登录表单模板上没有css_classes

时间:2011-03-21 21:41:18

标签: django django-templates django-forms django-models

我需要获取我在模板中呈现的表单上的字段的css类。现在根据文档here循环遍历表单时,每个项目都应该是BoundField个实例。并且根据文档here,我应该可以访问该实例的css_classes属性。

对于通用登录视图,我创建了通常的registration\login.html模板。但是在模板上我无法输出任何类,默认标签(.label_tag)也不包含任何类。

继承人的形式包括:

<div class="default_form">
{{form.non_field_errors}}
<br />
{% for field in form %}
{{field.css_classes}}
<div class="field_container">{{field.label_tag}}{{field}}</div>
<span class="field_help">{{field.help_text}}</span>
<div class="field_errors">{{field.errors}}</div>
<br />
{% endfor %}

我在这里做错了吗?

我需要我的验证javascripts的类才能工作。

1 个答案:

答案 0 :(得分:0)

如果您使用的是django.contrib.auth.forms.AuthenticationForm或类似内容,可能是因为error_css_classrequired_css_classForm (see docs)未设置。

>>> from django.contrib.auth.forms import AuthenticationForm
>>> hasattr(AuthenticationForm, 'required_css_class')
False
>>> AuthenticationForm({})['username'].css_classes()
''
>>> class MyForm(AuthenticationForm):
...     error_css_class = 'error'
...     required_css_class = 'required'
...
>>> MyForm({})['username'].css_classes()
'required'

您可以通过继承上述示例中的表单来解决此问题。

请注意,如果您希望使用标准login视图,则需要通过authentication_form argument传递自定义表单。例如。在urls.py

(r'^accounts/login/$', 'django.contrib.auth.views.login', 
    {'authentication_form': MyForm}),