2015-01-17 2 views
1

Mac에서 Django 1.7.3을 사용하고 있습니다.Django 프로젝트 경로의 유니 코드 문자

나는 다음과 같은 경로에 장고 프로젝트를 만들었습니다

/사용자/청/百度 云 同步 盘는/dev/장고/testproject/

(이 프로젝트는 'testproject'라고 함)

/Users/cheng/百度云同步盘/Dev/django/testproject/ 
            -> vis 
             -> templates 
               -> vis 
                 -> index.html 

(내 응용 프로그램 이름이 호출 '마주')

:

나는 문제 템플릿 파일을로드하는 데 617,451,515,

내가 올바른 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/ 

당신이 볼 수 있듯이, 경로 '百度 云 同步 盘'아스키가로 인코딩 된 '\ xe7 \ X99 \ XBE \ xe5의 유니 코드 부분 \ xba \ xa6 \ xe4 \ xba \ x91 \ xe5 \ x90 \ x8c \ xe6 \ xad \ xa5 \ xe7 \ x9b \ x98 '.

어쨌든 프로젝트를 비 유니 코드 디렉토리로 이동하는 것 외에이 문제를 해결할 수 있습니까?

감사합니다.


업데이트 : 파이썬 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) 
+0

그냥 non-ascii없이 프로젝트를 다른 곳으로 옮기면 괜찮습니다. – doniyor

+1

이 특정 문제는 해결할 수 있지만 비 ASCII 폴더에서 웹 사이트를 제공하면 다른 프로그램에서도 문제가 발생할 수 있습니다. 아마도 폴더의 이름을 바꾸거나 프로젝트를 옮기는 것이 더 쉽습니다. –

+0

이 문제의 원인을 찾으려면 사용하는 파이썬 버전을 확인하고 전체 스택 추적을 확인하는 것이 좋습니다. –

답변

1
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) 

이 장고 템플릿 로더에서 버그가 수 있도록 나타납니다.

.decode 문자열을 이미 유니 코드로 만들려고 했으므로 암시 적으로 .encode을 기본 인코딩으로 사용합니다.이 기본 인코딩은 ASCII이므로 중국어를 인코딩 할 수 없습니다. 해당 문자열은 유니 코드 문자열로 정의 된 AppConfig.path에서 가져온 모듈 파일 경로입니다.

Django에 버그를 제출하는 것이 좋습니다 (예 : '기본 인코딩에서 인코딩 할 수없는 경로로 인해 템플릿 로더가 실패 함'). 그동안 기본 인코딩을 sitecustomize.pyutf-8으로 설정하거나 경로가 all-ASCII 인 디렉토리에서 앱을 실행하여 문제를 해결할 수 있습니다.

+0

고마워요, 지금은 ascii 경로 폴더로 이동합니다. 버그 보고서를 제출할 수 있습니다. – Cheng