2015-05-04 4 views
0

Я пытаюсь найти каталог товаров из xml-файла с кириллическими символами. Я проанализирован его ElementTree, получил данные и пытался сохранить его в базу данных, но я получил ошибку кодирования:Django: UnicodeEncodeError при анализе xml с ElementTree

Request Method: GET 
Request URL: http://detsad-komplekt.loc/catalog/commerce/ 

Django Version: 1.8 
Python Version: 2.7.6 
Installed Applications: 
(u'admin_tools', 
u'admin_tools.theming', 
u'admin_tools.menu', 
u'admin_tools.dashboard', 
u'django.contrib.admin', 
u'django.contrib.auth', 
u'django.contrib.contenttypes', 
u'django.contrib.sessions', 
u'django.contrib.messages', 
u'django.contrib.staticfiles', 
u'mptt', 
u'daguerre', 
u'ckeditor', 
u'home', 
u'accounts', 
u'catalog', 
'debug_toolbar', 
'coverage') 
Installed Middleware: 
(u'debug_toolbar.middleware.DebugToolbarMiddleware', 
u'django.contrib.sessions.middleware.SessionMiddleware', 
u'django.middleware.common.CommonMiddleware', 
u'django.middleware.csrf.CsrfViewMiddleware', 
u'django.contrib.auth.middleware.AuthenticationMiddleware', 
u'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
u'django.contrib.messages.middleware.MessageMiddleware', 
u'django.middleware.clickjacking.XFrameOptionsMiddleware', 
u'django.middleware.security.SecurityMiddleware') 


Traceback: 
File "/home/oleshko/design/.virtualenvs/detsad-komplekt/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/oleshko/design/.virtualenvs/detsad-komplekt/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    71.    return self.dispatch(request, *args, **kwargs) 
File "/home/oleshko/design/.virtualenvs/detsad-komplekt/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch 
    89.   return handler(request, *args, **kwargs) 
File "/home/oleshko/design/detsad-komplekt/project/catalog/views.py" in get 
    109.   cat = parseCML() 
File "/home/oleshko/design/detsad-komplekt/project/catalog/tools.py" in parseCML 
    21.   name = name.decode('utf8', 'ignore') 
File "/home/oleshko/design/.virtualenvs/detsad-komplekt/lib/python2.7/encodings/utf_8.py" in decode 
    16.  return codecs.utf_8_decode(input, errors, True) 

Exception Type: UnicodeEncodeError at /catalog/commerce/ 
Exception Value: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128) 

Это моя функция:

def parseCML(): 
    with open('/home/oleshko/desktop/webdata/import.xml', 'r') as xml_file: 
     tree = etree.parse(xml_file) 
    root = tree.getroot() 
    elems = root[1][4] 
    res = [] 
    for prod in elems: 
     for cat in prod[4]: 
      c = Category.objects.filter(integration_id=cat.text)  
     name = prod[2].text 
     name = name.decode('utf8', 'ignore') 
     desc = prod[5].text 
     desc = desc.decode('utf8', 'ignore') 
     img = str(prod[6].text) 
     img = img.replace('import_files', '') 
     slug = pytils.translit.slugify(name) 
     # res.append([c, name, desc, img, '################']) 
     product = Product(name=name, slug=slug, category=c, description=desc, price=1) 
     new_product = product.save() 
     prod_img = ProductImage(product=new_product, src=img) 

    return True 

Я потерял 4 часа уже пытается решите эту проблему. Пожалуйста, дайте какие-либо предложения ...

ответ

0

Проблема здесь: с = Category.objects.filter (integration_id = cat.text)
Я забыл, что она возвращает QuerySet вместо категории, например, ошибка декодирования произошла где-то в то время как отбрасывая освобождение. Спасибо за пользователь 'catavaran'

Смежные вопросы