Django项目路径中的Unicode字符
Unicode character in Django project path
我在 Mac.
上使用 Django 1.7.3
我已经在以下路径中创建了一个 Django 项目:
/Users/cheng/百度云同步盘/Dev/django/testproject/
(项目名为'testproject')
我在加载模板文件时遇到问题:
/Users/cheng/百度云同步盘/Dev/django/testproject/
-> vis
-> templates
-> vis
-> index.html
(我的应用名称叫'vis')
当我打右边URL时,我得到:
UnicodeEncodeError at /vis/
'ascii' codec can't encode characters in position 13-18: ordinal not in range(128)
Python Path: ['/Users/cheng/\xe7\x99\xbe\xe5\xba\xa6\xe4\xba\x91\xe5\x90\x8c\xe6\xad\xa5\xe7\x9b\x98/Dev/django/testproject' ...
Unicode error hint
The string that could not be encoded/decoded was: heng/百度云同步盘/Dev/
如您所见,路径“百度云同步盘”的unicode部分已被ascii编码为“\xe7\x99\xbe\xe5\xba\xa6\xe4\xba\x91\xe5\x90\x8c\xe6\xad\xa5\xe7\x9b\x98”。
除了将项目移动到非 unicode 目录之外,还有什么方法可以解决这个问题吗?
谢谢!
更新:
我正在使用 python 2.7.9。完整堆栈跟踪:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/vis/
Django Version: 1.7.3
Python Version: 2.7.9
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'vis')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/cheng/百度云同步盘/Dev/django/testproject/vis/views.py" in index
7. return render(request, 'vis/index.html', context)
File "/usr/local/lib/python2.7/site-packages/django/shortcuts.py" in render
50. return HttpResponse(loader.render_to_string(*args, **kwargs),
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
170. t = get_template(template_name, dirs)
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template
144. template, origin = find_template(template_name, dirs)
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in find_template
126. loader = find_template_loader(loader_name)
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in find_template_loader
98. TemplateLoader = import_string(loader)
File "/usr/local/lib/python2.7/site-packages/django/utils/module_loading.py" in import_string
26. module = import_module(module_path)
File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py" in import_module
37. __import__(name)
File "/usr/local/lib/python2.7/site-packages/django/template/loaders/app_directories.py" in <module>
33. app_template_dirs = calculate_app_template_dirs()
File "/usr/local/lib/python2.7/site-packages/django/template/loaders/app_directories.py" in calculate_app_template_dirs
27. template_dir = template_dir.decode(fs_encoding)
File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py" in decode
16. return codecs.utf_8_decode(input, errors, True)
Exception Type: UnicodeEncodeError at /vis/
Exception Value: 'ascii' codec can't encode characters in position 13-18: ordinal not in range(128)
File "/usr/local/lib/python2.7/site-packages/django/template/loaders/app_directories.py" in calculate_app_template_dirs
27. template_dir = template_dir.decode(fs_encoding)
这似乎是 Django 模板加载器中的错误。
它正在尝试 .decode
一个已经是 Unicode 的字符串,导致隐式 .encode
到默认编码,在您的情况下是 ASCII,因此它无法对中文进行编码。有问题的字符串是模块文件路径,来自AppConfig.path,定义为Unicode字符串。
我建议提交一个针对 Django 的错误(例如“模板加载器因默认编码中不可编码的路径而失败”)。与此同时,您可以尝试通过在您的 sitecustomize.py
中将默认编码设置为 utf-8
来解决它,或者仅从路径为全 ASCII 的目录中将您的应用设置为 运行。
我在 Mac.
上使用 Django 1.7.3我已经在以下路径中创建了一个 Django 项目:
/Users/cheng/百度云同步盘/Dev/django/testproject/
(项目名为'testproject')
我在加载模板文件时遇到问题:
/Users/cheng/百度云同步盘/Dev/django/testproject/
-> vis
-> templates
-> vis
-> index.html
(我的应用名称叫'vis')
当我打右边URL时,我得到:
UnicodeEncodeError at /vis/
'ascii' codec can't encode characters in position 13-18: ordinal not in range(128)
Python Path: ['/Users/cheng/\xe7\x99\xbe\xe5\xba\xa6\xe4\xba\x91\xe5\x90\x8c\xe6\xad\xa5\xe7\x9b\x98/Dev/django/testproject' ...
Unicode error hint
The string that could not be encoded/decoded was: heng/百度云同步盘/Dev/
如您所见,路径“百度云同步盘”的unicode部分已被ascii编码为“\xe7\x99\xbe\xe5\xba\xa6\xe4\xba\x91\xe5\x90\x8c\xe6\xad\xa5\xe7\x9b\x98”。
除了将项目移动到非 unicode 目录之外,还有什么方法可以解决这个问题吗?
谢谢!
更新: 我正在使用 python 2.7.9。完整堆栈跟踪:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/vis/
Django Version: 1.7.3
Python Version: 2.7.9
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'vis')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/cheng/百度云同步盘/Dev/django/testproject/vis/views.py" in index
7. return render(request, 'vis/index.html', context)
File "/usr/local/lib/python2.7/site-packages/django/shortcuts.py" in render
50. return HttpResponse(loader.render_to_string(*args, **kwargs),
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
170. t = get_template(template_name, dirs)
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template
144. template, origin = find_template(template_name, dirs)
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in find_template
126. loader = find_template_loader(loader_name)
File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in find_template_loader
98. TemplateLoader = import_string(loader)
File "/usr/local/lib/python2.7/site-packages/django/utils/module_loading.py" in import_string
26. module = import_module(module_path)
File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py" in import_module
37. __import__(name)
File "/usr/local/lib/python2.7/site-packages/django/template/loaders/app_directories.py" in <module>
33. app_template_dirs = calculate_app_template_dirs()
File "/usr/local/lib/python2.7/site-packages/django/template/loaders/app_directories.py" in calculate_app_template_dirs
27. template_dir = template_dir.decode(fs_encoding)
File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py" in decode
16. return codecs.utf_8_decode(input, errors, True)
Exception Type: UnicodeEncodeError at /vis/
Exception Value: 'ascii' codec can't encode characters in position 13-18: ordinal not in range(128)
File "/usr/local/lib/python2.7/site-packages/django/template/loaders/app_directories.py" in calculate_app_template_dirs
27. template_dir = template_dir.decode(fs_encoding)
这似乎是 Django 模板加载器中的错误。
它正在尝试 .decode
一个已经是 Unicode 的字符串,导致隐式 .encode
到默认编码,在您的情况下是 ASCII,因此它无法对中文进行编码。有问题的字符串是模块文件路径,来自AppConfig.path,定义为Unicode字符串。
我建议提交一个针对 Django 的错误(例如“模板加载器因默认编码中不可编码的路径而失败”)。与此同时,您可以尝试通过在您的 sitecustomize.py
中将默认编码设置为 utf-8
来解决它,或者仅从路径为全 ASCII 的目录中将您的应用设置为 运行。