2012-04-16 49 views
2

网址:http://twitter.github.com/bootstrap/base-css.html#forms如何在django-registraton中使用Boostrap的客户端验证?

它说我要补充

<fieldset 
class="control-group error"> 
… 
</fieldset> 

但在这里我想补充一点?

如果密码不匹配,如果用户名已被占用,如果电子邮件地址无效,我希望输入字段显示红色边框并向右侧显示错误消息(就像在Twitter Boostrap表格页)

这里是我的整个registration_form.html模板。它有一个{{形式}}标签,其包括4个字段默认:

  1. 用户名
  2. 电子邮件
  3. 密码
  4. 密码(再次)

registration_base.html简单地扩展了base.html,它包含了页面的基本结构。

{% extends "registration/registration_base.html" %} 
{% block title %}Register for an account{% endblock %} 
{% block content %} 

<table> 
    <form method='post' action='' class="control-group error" >{% csrf_token %} 
     {{ form }} 
     <tr><td></td><td><input type="submit" value="Register" /></td> 
    </form> 
</table> 
{% endblock %} 

例子: enter image description here

回答

4

django-bootstrap是一个伟大的图书馆为你自动执行此操作。它依靠使用它为您呈现的自定义Form对象。 django注册过程中使用的默认表单为registration.forms.RegistrationFormUniqueEmail。为了将这种形式与django-bootstrap结合起来,你需要定义一个从这两个继承的新类。例如,将这个在您的forms.py文件:

# forms.py 
from bootstrap.forms import BootstrapForm 
from registration.forms import RegistrationFormUniqueEmail 
class RegistrationForm(RegistrationFormUniqueEmail, BootstrapForm): 
    pass 

接下来,你必须告诉Django注册使用这个新的形式。 Django的注册默认设置是将它添加到您的urls.py:

# urls.py 
(r'^accounts/', include('registration.backends.default.urls')), 

但是,这种使用默认的形式。要进行自定义,您可以明确指定URL。从django注册的default backend urls.py复制它们。注册的默认项看起来是这样的:

# urls.py 
from registration.views import register 
url(r'^register/$', 
    register, 
    {'backend': 'registration.backends.default.DefaultBackend'}, 
    name='registration_register'), 

要指定要使用的自定义窗体对象,the documentation表示可以传递参数,form_class,像这样:

# urls.py 
from yourapp.forms import RegistrationForm 
from registration.views import register 
url(r'^register/$', 
    register, 
    {'backend': 'registration.backends.default.DefaultBackend' 
    'form_class': RegistrationForm}, 
    name='registration_register'), 

你可以对django注册中使用的所有表单重复此过程。生成的报名表看起来是这样的,当错误出现:

enter image description here

+0

抛出找不到页面。你能填空吗?我是Django的新手。为什么我需要那个通过并且什么都不做的空类?为什么我需要为^ register $写一个单独的url,当django-registrations已经为account/register下提供了一个。如果你能在GitHub上上传这个示例工作项目,我将非常感激,所以我可以看看并从中学习!谢谢! – 2012-04-17 11:58:04

+0

我重写了这篇文章,试图澄清发生了什么。不幸的是,我在一个内部项目中使用它,所以我不能将您链接到代码。让我知道这是否有帮助。 – jterrace 2012-04-17 16:38:17

+0

谢谢你的广泛解释。有效!。 – 2012-04-18 01:58:44