From c830b6cfef7f0514fafcc05f39dacb719b71d09f Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Thu, 24 May 2007 12:04:44 +0000 Subject: [PATCH] unicode: Fixed a few Python 2.3 problems caused by 2.3's slightly brain-damaged unicode string interpolation. git-svn-id: http://code.djangoproject.com/svn/django/branches/unicode@5331 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- .../admin/templatetags/admin_modify.py | 6 +-- .../admin/templatetags/adminapplist.py | 5 ++- django/contrib/admin/views/main.py | 38 +++++++++---------- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/django/contrib/admin/templatetags/admin_modify.py b/django/contrib/admin/templatetags/admin_modify.py index cfadda597d..9bc41c6450 100644 --- a/django/contrib/admin/templatetags/admin_modify.py +++ b/django/contrib/admin/templatetags/admin_modify.py @@ -2,7 +2,7 @@ from django import template from django.contrib.admin.views.main import AdminBoundField from django.template import loader from django.utils.text import capfirst -from django.utils.encoding import smart_unicode +from django.utils.encoding import force_unicode from django.db import models from django.db.models.fields import Field from django.db.models.related import BoundRelatedObject @@ -64,7 +64,7 @@ def field_label(bound_field): colon = ":" class_str = class_names and u' class="%s"' % u' '.join(class_names) or u'' return u' ' % (bound_field.element_id, class_str, \ - capfirst(bound_field.field.verbose_name), colon) + force_unicode(capfirst(bound_field.field.verbose_name)), colon) field_label = register.simple_tag(field_label) class FieldWidgetNode(template.Node): @@ -176,7 +176,7 @@ class EditInlineNode(template.Node): return output def output_all(form_fields): - return u''.join([smart_unicode(f) for f in form_fields]) + return u''.join([force_unicode(f) for f in form_fields]) output_all = register.simple_tag(output_all) def auto_populated_field_script(auto_pop_fields, change = False): diff --git a/django/contrib/admin/templatetags/adminapplist.py b/django/contrib/admin/templatetags/adminapplist.py index 10e09ca0b6..673b77a1e0 100644 --- a/django/contrib/admin/templatetags/adminapplist.py +++ b/django/contrib/admin/templatetags/adminapplist.py @@ -1,5 +1,6 @@ from django import template from django.db.models import get_models +from django.utils.encoding import force_unicode register = template.Library() @@ -36,8 +37,8 @@ class AdminApplistNode(template.Node): # If so, add the module to the model_list. if True in perms.values(): model_list.append({ - 'name': capfirst(m._meta.verbose_name_plural), - 'admin_url': '%s/%s/' % (app_label, m.__name__.lower()), + 'name': force_unicode(capfirst(m._meta.verbose_name_plural)), + 'admin_url': u'%s/%s/' % (force_unicode(app_label), m.__name__.lower()), 'perms': perms, }) diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 4d350fb388..328fd4d340 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -142,7 +142,7 @@ class AdminBoundField(object): return self._display except AttributeError: if isinstance(self.field.rel, models.ManyToOneRel): - self._display = getattr(self.original, self.field.name) + self._display = force_unicode(getattr(self.original, self.field.name)) elif isinstance(self.field.rel, models.ManyToManyRel): self._display = u", ".join([force_unicode(obj) for obj in getattr(self.original, self.field.name).all()]) return self._display @@ -256,7 +256,7 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po new_object = manipulator.save(new_data) pk_value = new_object._get_pk_val() LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, force_unicode(new_object), ADDITION) - msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': opts.verbose_name, 'obj': new_object} + msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': new_object} # Here, we distinguish between different save types by checking for # the presence of keys in request.POST. if "_continue" in request.POST: @@ -270,7 +270,7 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po return HttpResponse('' % \ (pk_value, force_unicode(new_object).replace('"', '\\"'))) elif "_addanother" in request.POST: - request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % opts.verbose_name)) + request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name))) return HttpResponseRedirect(request.path) else: request.user.message_set.create(message=msg) @@ -288,7 +288,7 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po form = oldforms.FormWrapper(manipulator, new_data, errors) c = template.RequestContext(request, { - 'title': _('Add %s') % opts.verbose_name, + 'title': _('Add %s') % force_unicode(opts.verbose_name), 'form': form, 'is_popup': '_popup' in request.REQUEST, 'show_delete': show_delete, @@ -344,7 +344,7 @@ def change_stage(request, app_label, model_name, object_id): change_message = _('No fields changed.') LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, force_unicode(new_object), CHANGE, change_message) - msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj': new_object} + msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': new_object} if "_continue" in request.POST: request.user.message_set.create(message=msg + ' ' + _("You may edit it again below.")) if '_popup' in request.REQUEST: @@ -352,10 +352,10 @@ def change_stage(request, app_label, model_name, object_id): else: return HttpResponseRedirect(request.path) elif "_saveasnew" in request.POST: - request.user.message_set.create(message=_('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': opts.verbose_name, 'obj': new_object}) + request.user.message_set.create(message=_('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': force_unicode(opts.verbose_name), 'obj': new_object}) return HttpResponseRedirect("../%s/" % pk_value) elif "_addanother" in request.POST: - request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % opts.verbose_name)) + request.user.message_set.create(message=msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name))) return HttpResponseRedirect("../add/") else: request.user.message_set.create(message=msg) @@ -390,7 +390,7 @@ def change_stage(request, app_label, model_name, object_id): form.order_objects.extend(orig_list) c = template.RequestContext(request, { - 'title': _('Change %s') % opts.verbose_name, + 'title': _('Change %s') % force_unicode(opts.verbose_name), 'form': form, 'object_id': object_id, 'original': manipulator.original_object, @@ -431,11 +431,11 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current if related.field.rel.edit_inline or not related.opts.admin: # Don't display link to edit, because it either has no # admin or is edited inline. - nh(deleted_objects, current_depth, [u'%s: %s' % (capfirst(related.opts.verbose_name), sub_obj), []]) + nh(deleted_objects, current_depth, [u'%s: %s' % (force_unicode(capfirst(related.opts.verbose_name)), sub_obj), []]) else: # Display a link to the admin page. nh(deleted_objects, current_depth, [u'%s: %s' % \ - (capfirst(related.opts.verbose_name), related.opts.app_label, related.opts.object_name.lower(), + (force_unicode(capfirst(related.opts.verbose_name)), related.opts.app_label, related.opts.object_name.lower(), sub_obj._get_pk_val(), sub_obj), []]) _get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, related.opts, current_depth+2) else: @@ -445,11 +445,11 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current if related.field.rel.edit_inline or not related.opts.admin: # Don't display link to edit, because it either has no # admin or is edited inline. - nh(deleted_objects, current_depth, [u'%s: %s' % (capfirst(related.opts.verbose_name), escape(sub_obj)), []]) + nh(deleted_objects, current_depth, [u'%s: %s' % (force_unicode(capfirst(related.opts.verbose_name)), escape(sub_obj)), []]) else: # Display a link to the admin page. nh(deleted_objects, current_depth, [u'%s: %s' % \ - (capfirst(related.opts.verbose_name), related.opts.app_label, related.opts.object_name.lower(), sub_obj._get_pk_val(), escape(sub_obj)), []]) + (force_unicode(capfirst(related.opts.verbose_name)), related.opts.app_label, related.opts.object_name.lower(), sub_obj._get_pk_val(), escape(sub_obj)), []]) _get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, related.opts, current_depth+2) # If there were related objects, and the user doesn't have # permission to delete them, add the missing perm to perms_needed. @@ -476,11 +476,11 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current # Don't display link to edit, because it either has no # admin or is edited inline. nh(deleted_objects, current_depth, [_('One or more %(fieldname)s in %(name)s: %(obj)s') % \ - {'fieldname': related.field.verbose_name, 'name': related.opts.verbose_name, 'obj': escape(sub_obj)}, []]) + {'fieldname': force_unicode(related.field.verbose_name), 'name': force_unicode(related.opts.verbose_name), 'obj': escape(sub_obj)}, []]) else: # Display a link to the admin page. nh(deleted_objects, current_depth, [ - (_('One or more %(fieldname)s in %(name)s:') % {'fieldname': related.field.verbose_name, 'name':related.opts.verbose_name}) + \ + (_('One or more %(fieldname)s in %(name)s:') % {'fieldname': force_unicode(related.field.verbose_name), 'name': force_unicode(related.opts.verbose_name)}) + \ (u' %s' % \ (related.opts.app_label, related.opts.module_name, sub_obj._get_pk_val(), escape(sub_obj))), []]) # If there were related objects, and the user doesn't have @@ -503,7 +503,7 @@ def delete_stage(request, app_label, model_name, object_id): # Populate deleted_objects, a data structure of all related objects that # will also be deleted. - deleted_objects = [u'%s: %s' % (capfirst(opts.verbose_name), object_id, escape(obj)), []] + deleted_objects = [u'%s: %s' % (force_unicode(capfirst(opts.verbose_name)), object_id, escape(obj)), []] perms_needed = sets.Set() _get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1) @@ -513,11 +513,11 @@ def delete_stage(request, app_label, model_name, object_id): obj_display = force_unicode(obj) obj.delete() LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, object_id, obj_display, DELETION) - request.user.message_set.create(message=_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': opts.verbose_name, 'obj': obj_display}) + request.user.message_set.create(message=_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': obj_display}) return HttpResponseRedirect("../../") extra_context = { "title": _("Are you sure?"), - "object_name": opts.verbose_name, + "object_name": force_unicode(opts.verbose_name), "object": obj, "deleted_objects": deleted_objects, "perms_lacking": perms_needed, @@ -540,7 +540,7 @@ def history(request, app_label, model_name, object_id): extra_context = { 'title': _('Change history: %s') % obj, 'action_list': action_list, - 'module_name': capfirst(model._meta.verbose_name_plural), + 'module_name': force_unicode(capfirst(model._meta.verbose_name_plural)), 'object': obj, } return render_to_response(["admin/%s/%s/object_history.html" % (app_label, model._meta.object_name.lower()), @@ -572,7 +572,7 @@ class ChangeList(object): self.query = request.GET.get(SEARCH_VAR, '') self.query_set = self.get_query_set() self.get_results(request) - self.title = (self.is_popup and _('Select %s') % self.opts.verbose_name or _('Select %s to change') % self.opts.verbose_name) + self.title = (self.is_popup and _('Select %s') % force_unicode(self.opts.verbose_name) or _('Select %s to change') % force_unicode(self.opts.verbose_name)) self.filter_specs, self.has_filters = self.get_filters(request) self.pk_attname = self.lookup_opts.pk.attname