首页 文章

渲染时捕获UnicodeEncodeError:'ascii'编解码器无法编码位置4-5中的字符:序数不在范围内(128)

提问于
浏览
0

你好,我住在波兰,所以我必须处理像łóźć等字母 . 当我尝试添加,在管理pannel,文本像“ZespółSzkół”我得到这样的错误:

渲染时捕获UnicodeEncodeError:'ascii'编解码器无法编码位置4-5中的字符:序数不在范围内(128)

我在Stackoverflow页面上看到很多类似的问题,但我不知道如何解决我的问题 .

我的数据库是 MySQL

我的数据库的Unicode集合: utf8_unicode_ci

我的 models.py

# -*- coding: utf-8 -*-
from django.db import models
import codecs

...    

class experience(models.Model):
    dateStart = models.DateField()
    dateEnd = models.DateField()
    company = models.CharField(max_length=50)
    position = models.CharField(max_length=50)
    description = models.TextField(max_length=255)
    def __unicode__(self):
        return self.company.decode('utf8')    

...

追溯

Request Method: GET
Request URL: http://vm:8000/admin/mycv/experience/

Django Version: 1.3.1
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'cv.mycv']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Template error:
In template /usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/admin/change_list.html, error at line 97
   Caught UnicodeEncodeError while rendering: 'ascii' codec can't encode characters in position 4-5: ordinal not in range(128)
   87 :         {% endif %}


   88 :       {% endblock %}


   89 : 


   90 :       <form id="changelist-form" action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}


   91 :       {% if cl.formset %}


   92 :         <div>{{ cl.formset.management_form }}</div>


   93 :       {% endif %}


   94 : 


   95 :       {% block result_list %}


   96 :           {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}


   97 :            {% result_list cl %} 


   98 :           {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}


   99 :       {% endblock %}


   100 :       {% block pagination %}{% pagination cl %}{% endblock %}


   101 :       </form>


   102 :     </div>


   103 :   </div>


   104 : {% endblock %}


   105 : 

Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/options.py" in wrapper
  307.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/utils/decorators.py" in _wrapped_view
  93.                     response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  79.         response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in inner
  197.             return view(request, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/utils/decorators.py" in _wrapper
  28.             return bound_func(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/utils/decorators.py" in _wrapped_view
  93.                     response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/utils/decorators.py" in bound_func
  24.                 return func(self, *args2, **kwargs2)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/options.py" in changelist_view
  1179.         ], context, context_instance=context_instance)
File "/usr/local/lib/python2.6/dist-packages/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py" in render_to_string
  188.         return t.render(context_instance)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in render
  123.             return self._render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/usr/local/lib/python2.6/dist-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader_tags.py" in render
  127.         return compiled_parent._render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/usr/local/lib/python2.6/dist-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader_tags.py" in render
  127.         return compiled_parent._render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/usr/local/lib/python2.6/dist-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader_tags.py" in render
  64.             result = block.nodelist.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/usr/local/lib/python2.6/dist-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/loader_tags.py" in render
  64.             result = block.nodelist.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/usr/local/lib/python2.6/dist-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/usr/local/lib/python2.6/dist-packages/django/template/base.py" in render
  921.                     dict = func(*args)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templatetags/admin_list.py" in result_list
  232.             'results': list(results(cl))}
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templatetags/admin_list.py" in results
  217.             yield ResultList(None, items_for_result(cl, res, None))
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templatetags/admin_list.py" in __init__
  209.         super(ResultList, self).__init__(*items)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templatetags/admin_list.py" in items_for_result
  137.             f, attr, value = lookup_field(field_name, result, cl.model_admin)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/util.py" in lookup_field
  218.                 value = attr()
File "/usr/local/lib/python2.6/dist-packages/django/db/models/base.py" in __str__
  377.             return force_unicode(self).encode('utf-8')
File "/usr/local/lib/python2.6/dist-packages/django/utils/encoding.py" in force_unicode
  71.                 s = unicode(s)
File "/home/lechu/apps/cv/../cv/mycv/models.py" in __unicode__
  31.         return self.company.decode('utf8')    
File "/usr/lib/python2.6/encodings/utf_8.py" in decode
  16.     return codecs.utf_8_decode(input, errors, True)

Exception Type: TemplateSyntaxError at /admin/mycv/experience/
Exception Value: Caught UnicodeEncodeError while rendering: 'ascii' codec can't encode characters in position 4-5: ordinal not in range(128)




   104 : {% endblock %}


   105 : 

Traceback:
File

1 回答

  • 6

    不幸的是,你的 __unicode__ 方法是胡说八道 .

    decode 用于将字节串转换为unicode,但 self.company 已经是unicode . 所以在它上面调用 decode('utf-8') 就意味着Python必须首先将它隐式编码为一个字节串,这是默认的 ascii 编码 - 只要你有任何重音字符就会失败 .

    我不知道你试图用这个方法做什么,但 __unicode__ 方法应该总是返回unicode . 只需 return self.company 就可以了 .

相关问题