Django

Code

Changeset 6142

Show
Ignore:
Timestamp:
09/13/07 18:09:40 (1 year ago)
Author:
mtredinnick
Message:

Fixed #4752 -- Make default ErrorList? customisable in newforms display. Based on a patch from michal@logix.cz and SmileyChris?.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/newforms/forms.py

    r5819 r6142  
    5858    # information. Any improvements to the form API should be made to *this* 
    5959    # class, not to the Form class. 
    60     def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, initial=None): 
     60    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, 
     61            initial=None, error_class=ErrorList): 
    6162        self.is_bound = data is not None or files is not None 
    6263        self.data = data or {} 
     
    6566        self.prefix = prefix 
    6667        self.initial = initial or {} 
     68        self.error_class = error_class 
    6769        self._errors = None # Stores the errors after clean() has been called. 
    6870 
     
    118120        for name, field in self.fields.items(): 
    119121            bf = BoundField(self, field, name) 
    120             bf_errors = ErrorList([escape(error) for error in bf.errors]) # Escape and cache in local variable. 
     122            bf_errors = self.error_class([escape(error) for error in bf.errors]) # Escape and cache in local variable. 
    121123            if bf.is_hidden: 
    122124                if bf_errors: 
     
    169171        are none. 
    170172        """ 
    171         return self.errors.get(NON_FIELD_ERRORS, ErrorList()) 
     173        return self.errors.get(NON_FIELD_ERRORS, self.error_class()) 
    172174 
    173175    def full_clean(self): 
     
    242244        if there are none. 
    243245        """ 
    244         return self.form.errors.get(self.name, ErrorList()) 
     246        return self.form.errors.get(self.name, self.form.error_class()) 
    245247    errors = property(_errors) 
    246248 
  • django/trunk/docs/newforms.txt

    r6124 r6142  
    552552    <p>Message: <input type="text" name="message" value="Hi there" /></p> 
    553553    <p><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul></p> 
     554    <p>Sender: <input type="text" name="sender" value="invalid e-mail address" /></p> 
     555    <p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p> 
     556 
     557Customizing the error list format 
     558~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     559 
     560By default, forms use ``django.newforms.util.ErrorList`` to format validation 
     561errors. If you'd like to use an alternate class for displaying errors, you can 
     562pass that in at construction time:: 
     563 
     564    >>> from django.newforms.util import ErrorList 
     565    >>> class DivErrorList(ErrorList): 
     566    ...     def __unicode__(self): 
     567    ...         return self.as_divs() 
     568    ...     def as_divs(self): 
     569    ...         if not self: return u'' 
     570    ...         return u'<div class="errorlist">%s</div>' % ''.join([u'<div class="error">%s</div>' % e for e in self]) 
     571    >>> f = ContactForm(data, auto_id=False, error_class=DivErrorList) 
     572    >>> f.as_p() 
     573    <div class="errorlist"><div class="error">This field is required.</div></div> 
     574    <p>Subject: <input type="text" name="subject" maxlength="100" /></p> 
     575    <p>Message: <input type="text" name="message" value="Hi there" /></p> 
     576    <div class="errorlist"><div class="error">Enter a valid e-mail address.</div></div> 
    554577    <p>Sender: <input type="text" name="sender" value="invalid e-mail address" /></p> 
    555578    <p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p> 
  • django/trunk/tests/regressiontests/forms/tests.py

    r6067 r6142  
    38223822>>> f.cleaned_data['username'] 
    38233823u'sirrobin' 
     3824 
     3825####################################### 
     3826# Test overriding ErrorList in a form # 
     3827####################################### 
     3828 
     3829>>> from django.newforms.util import ErrorList 
     3830>>> class DivErrorList(ErrorList): 
     3831...     def __unicode__(self): 
     3832...         return self.as_divs() 
     3833...     def as_divs(self): 
     3834...         if not self: return u'' 
     3835...         return u'<div class="errorlist">%s</div>' % ''.join([u'<div class="error">%s</div>' % e for e in self]) 
     3836>>> class CommentForm(Form): 
     3837...     name = CharField(max_length=50, required=False) 
     3838...     email = EmailField() 
     3839...     comment = CharField() 
     3840>>> data = dict(email='invalid') 
     3841>>> f = CommentForm(data, auto_id=False, error_class=DivErrorList) 
     3842>>> print f.as_p() 
     3843<p>Name: <input type="text" name="name" maxlength="50" /></p> 
     3844<div class="errorlist"><div class="error">Enter a valid e-mail address.</div></div> 
     3845<p>Email: <input type="text" name="email" value="invalid" /></p> 
     3846<div class="errorlist"><div class="error">This field is required.</div></div> 
     3847<p>Comment: <input type="text" name="comment" /></p> 
     3848 
    38243849""" 
    38253850