Ошибка Unicode при создании каталога в Flask-Admin
Я собираюсь UnicodeDecodeError
ошибка с FileAdmin
модуль (входит в Flask-Admin
библиотека для колб):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 5: ordinal not in range(128)
Всякий раз, когда я создаю каталог, в имени которого есть символы, не входящие в ASCII (например, très), я получаю эту ошибку.
Я думаю, что смысл в том, чтобы добавить кодировку UTF-8:
# -*- coding: utf-8 -*-
но где (какие файлы?) и как с этим справиться FileAdmin module
? Это мне неясно.
Отредактируйте следующий запрос @PaoloCasciello, найдите ниже трассировку ошибки
Traceback (most recent call last)
File "C:\Python27\lib\site-packages\flask\app.py", line 1701, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Python27\lib\site-packages\flask\app.py", line 1689, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:\Python27\lib\site-packages\flask\app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Python27\lib\site-packages\flask\app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1344, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Python27\lib\site-packages\flask_admin\base.py", line 59, in inner
return f(self, **kwargs)
File "C:\Python27\lib\site-packages\flask_admin\base.py", line 59, in inner
return f(self, **kwargs)
File "C:\Python27\lib\site-packages\flask_admin\contrib\fileadmin.py", line 460, in index
actions_confirmation=actions_confirmation)
File "C:\Python27\lib\site-packages\flask_admin\base.py", line 247, in render
return render_template(template, **kwargs)
File "C:\Python27\lib\site-packages\flask\templating.py", line 125, in render_template
context, ctx.app)
File "C:\Python27\lib\site-packages\flask\templating.py", line 107, in _render
rv = template.render(context)
File "C:\Python27\lib\site-packages\jinja2\environment.py", line 969, in render
return self.environment.handle_exception(exc_info, True)
File "C:\Python27\lib\site-packages\jinja2\environment.py", line 742, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Flask\test\templates\admin\file\list.html", line 3, in top-level template code
{% import 'admin/actions.html' as actionslib with context %}
File "C:\Flask\test\templates\admin\master.html", line 1, in top-level template code
{% extends admin_base_template %}
File "C:\Flask\test\templates\admin\base.html", line 22, in top-level template code
{% block page_body %}
File "C:\Flask\test\templates\admin\base.html", line 40, in block "page_body"
{% block body %}{% endblock %}
File "C:\Flask\test\templates\admin\file\list.html", line 24, in block "body"
{% block file_list_table %}
File "C:\Flask\test\templates\admin\file\list.html", line 42, in block "file_list_table"
{% block list_row scoped %}
File "C:\Flask\test\templates\admin\file\list.html", line 51, in block "list_row"
{% block list_row_actions scoped %}
File "C:\Flask\test\templates\admin\file\list.html", line 61, in block "list_row_actions"
<input type="hidden" name="path" value="{{ path }}"></input>
File "C:\Python27\lib\site-packages\markupsafe\_native.py", line 22, in escape
return Markup(text_type(s)
1 ответ
Это происходит потому, что Python os.walkdir
возвращает имена файлов в ASCII при вызове с путем ascii.
Итак, когда вы инициализируете FileAdmin, убедитесь, что вы передаете базовый путь в виде строки Unicode::
admin.add_view(unicode(path), '/files/', name='Files')
В последней версии Flask-Admin это исправлено - FileAdmin будет принудительно вызывать Unicode для пути внутри.