mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	newforms: Added __unicode__() methods wherever there were __str__() methods, and changed the __str__() methods to delegate to __unicode__().encode(settings.DEFAULT_CHARSET)
git-svn-id: http://code.djangoproject.com/svn/django/trunk@4163 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -6,7 +6,7 @@ from django.utils.datastructures import SortedDict | |||||||
| from django.utils.html import escape | from django.utils.html import escape | ||||||
| from fields import Field | from fields import Field | ||||||
| from widgets import TextInput, Textarea, HiddenInput | from widgets import TextInput, Textarea, HiddenInput | ||||||
| from util import ErrorDict, ErrorList, ValidationError | from util import StrAndUnicode, ErrorDict, ErrorList, ValidationError | ||||||
|  |  | ||||||
| NON_FIELD_ERRORS = '__all__' | NON_FIELD_ERRORS = '__all__' | ||||||
|  |  | ||||||
| @@ -32,7 +32,7 @@ class DeclarativeFieldsMetaclass(type): | |||||||
|         attrs['fields'] = SortedDictFromList(fields) |         attrs['fields'] = SortedDictFromList(fields) | ||||||
|         return type.__new__(cls, name, bases, attrs) |         return type.__new__(cls, name, bases, attrs) | ||||||
|  |  | ||||||
| class Form(object): | class Form(StrAndUnicode): | ||||||
|     "A collection of Fields, plus their associated data." |     "A collection of Fields, plus their associated data." | ||||||
|     __metaclass__ = DeclarativeFieldsMetaclass |     __metaclass__ = DeclarativeFieldsMetaclass | ||||||
|  |  | ||||||
| @@ -43,7 +43,7 @@ class Form(object): | |||||||
|         self.clean_data = None # Stores the data after clean() has been called. |         self.clean_data = None # Stores the data after clean() has been called. | ||||||
|         self.__errors = None # Stores the errors after clean() has been called. |         self.__errors = None # Stores the errors after clean() has been called. | ||||||
|  |  | ||||||
|     def __str__(self): |     def __unicode__(self): | ||||||
|         return self.as_table() |         return self.as_table() | ||||||
|  |  | ||||||
|     def __iter__(self): |     def __iter__(self): | ||||||
| @@ -155,14 +155,14 @@ class Form(object): | |||||||
|         """ |         """ | ||||||
|         return self.clean_data |         return self.clean_data | ||||||
|  |  | ||||||
| class BoundField(object): | class BoundField(StrAndUnicode): | ||||||
|     "A Field plus data" |     "A Field plus data" | ||||||
|     def __init__(self, form, field, name): |     def __init__(self, form, field, name): | ||||||
|         self.form = form |         self.form = form | ||||||
|         self.field = field |         self.field = field | ||||||
|         self.name = name |         self.name = name | ||||||
|  |  | ||||||
|     def __str__(self): |     def __unicode__(self): | ||||||
|         "Renders this field as an HTML widget." |         "Renders this field as an HTML widget." | ||||||
|         # Use the 'widget' attribute on the field to determine which type |         # Use the 'widget' attribute on the field to determine which type | ||||||
|         # of HTML widget to use. |         # of HTML widget to use. | ||||||
|   | |||||||
| @@ -1,13 +1,22 @@ | |||||||
| # Default encoding for input byte strings. | from django.conf import settings | ||||||
| DEFAULT_ENCODING = 'utf-8' # TODO: First look at django.conf.settings, then fall back to this. |  | ||||||
|  |  | ||||||
| def smart_unicode(s): | def smart_unicode(s): | ||||||
|     if not isinstance(s, basestring): |     if not isinstance(s, basestring): | ||||||
|         s = unicode(str(s)) |         s = unicode(str(s)) | ||||||
|     elif not isinstance(s, unicode): |     elif not isinstance(s, unicode): | ||||||
|         s = unicode(s, DEFAULT_ENCODING) |         s = unicode(s, settings.DEFAULT_CHARSET) | ||||||
|     return s |     return s | ||||||
|  |  | ||||||
|  | class StrAndUnicode(object): | ||||||
|  |     """ | ||||||
|  |     A class whose __str__ returns its __unicode__ as a bytestring | ||||||
|  |     according to settings.DEFAULT_CHARSET. | ||||||
|  |  | ||||||
|  |     Useful as a mix-in. | ||||||
|  |     """ | ||||||
|  |     def __str__(self): | ||||||
|  |         return self.__unicode__().encode(settings.DEFAULT_CHARSET) | ||||||
|  |  | ||||||
| class ErrorDict(dict): | class ErrorDict(dict): | ||||||
|     """ |     """ | ||||||
|     A collection of errors that knows how to display itself in various formats. |     A collection of errors that knows how to display itself in various formats. | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ __all__ = ( | |||||||
|     'Select', 'SelectMultiple', 'RadioSelect', 'CheckboxSelectMultiple', |     'Select', 'SelectMultiple', 'RadioSelect', 'CheckboxSelectMultiple', | ||||||
| ) | ) | ||||||
|  |  | ||||||
| from util import smart_unicode | from util import StrAndUnicode, smart_unicode | ||||||
| from django.utils.html import escape | from django.utils.html import escape | ||||||
| from itertools import chain | from itertools import chain | ||||||
|  |  | ||||||
| @@ -146,7 +146,7 @@ class SelectMultiple(Widget): | |||||||
|         output.append(u'</select>') |         output.append(u'</select>') | ||||||
|         return u'\n'.join(output) |         return u'\n'.join(output) | ||||||
|  |  | ||||||
| class RadioInput(object): | class RadioInput(StrAndUnicode): | ||||||
|     "An object used by RadioFieldRenderer that represents a single <input type='radio'>." |     "An object used by RadioFieldRenderer that represents a single <input type='radio'>." | ||||||
|     def __init__(self, name, value, attrs, choice, index): |     def __init__(self, name, value, attrs, choice, index): | ||||||
|         self.name, self.value = name, value |         self.name, self.value = name, value | ||||||
| @@ -154,7 +154,7 @@ class RadioInput(object): | |||||||
|         self.choice_value, self.choice_label = choice |         self.choice_value, self.choice_label = choice | ||||||
|         self.index = index |         self.index = index | ||||||
|  |  | ||||||
|     def __str__(self): |     def __unicode__(self): | ||||||
|         return u'<label>%s %s</label>' % (self.tag(), self.choice_label) |         return u'<label>%s %s</label>' % (self.tag(), self.choice_label) | ||||||
|  |  | ||||||
|     def is_checked(self): |     def is_checked(self): | ||||||
| @@ -168,7 +168,7 @@ class RadioInput(object): | |||||||
|             final_attrs['checked'] = 'checked' |             final_attrs['checked'] = 'checked' | ||||||
|         return u'<input%s />' % flatatt(final_attrs) |         return u'<input%s />' % flatatt(final_attrs) | ||||||
|  |  | ||||||
| class RadioFieldRenderer(object): | class RadioFieldRenderer(StrAndUnicode): | ||||||
|     "An object used by RadioSelect to enable customization of radio widgets." |     "An object used by RadioSelect to enable customization of radio widgets." | ||||||
|     def __init__(self, name, value, attrs, choices): |     def __init__(self, name, value, attrs, choices): | ||||||
|         self.name, self.value, self.attrs = name, value, attrs |         self.name, self.value, self.attrs = name, value, attrs | ||||||
| @@ -178,7 +178,7 @@ class RadioFieldRenderer(object): | |||||||
|         for i, choice in enumerate(self.choices): |         for i, choice in enumerate(self.choices): | ||||||
|             yield RadioInput(self.name, self.value, self.attrs.copy(), choice, i) |             yield RadioInput(self.name, self.value, self.attrs.copy(), choice, i) | ||||||
|  |  | ||||||
|     def __str__(self): |     def __unicode__(self): | ||||||
|         "Outputs a <ul> for this set of radio fields." |         "Outputs a <ul> for this set of radio fields." | ||||||
|         return u'<ul>\n%s\n</ul>' % u'\n'.join([u'<li>%s</li>' % w for w in self]) |         return u'<ul>\n%s\n</ul>' % u'\n'.join([u'<li>%s</li>' % w for w in self]) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user