2016-06-12 3 views
1

내 사이트를 django 1.9로 이식하고 있으며이 문제를 올바르게 해결하는 방법을 알지 못합니다.EmailField를 사용하여 form.errors를 호출하는 중에 DjangoUnicodeDecodeError가 발생했습니다.

내 양식에는 장고 양식의 일반적인 EmailField가 있습니다. 유효성 검사가 실패하면 메시지에 대한 메시지가 표시됩니다 (조작을 위해 컨텍스트에 'form_errors': form.errors} 전달).

그러나이 경우에

@deconstructible 
class EmailValidator(object): 
    message = _('Enter a valid email address.') 
    ... 

내가 message = 'error' 메시지를 변경하면 모두가 잘 작동에 대한 검증이 반환 django.core.validators에서

DjangoUnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128). You passed in ()

을 장고.

그래서 질문 : 장고 파일을 편집하지 않고 어떻게이 문제를 해결할 수 있습니까?

문제는 form.errors를 호출하는 것입니다.이 오류는 단지 인쇄 만하려는 경우에도 발생합니다. (print form.errors). 다른 필드 오류 (예 : IntegerField, URLField)는 정상적으로 작동하지만이 문제는 EmailField에서만 발생합니다.

보기의 과정은 지금과 같다 :

from django.http import JsonResponse 
... 

if form.is_valid(): 
    ... 
else: 
    return JsonResponse({'form_errors': form.errors}) 

마지막 역 추적은 다음과 같습니다 잘

File "/path/views.py", line 331, in custom_form_post 
    response = JsonResponse({'form_errors': form.errors}) 
    File "/path/.env/local/lib/python2.7/site-packages/django/http/response.py", line 505, in __init__ 
    data = json.dumps(data, cls=encoder, **json_dumps_params) 
    File "/usr/lib/python2.7/json/__init__.py", line 250, in dumps 
    sort_keys=sort_keys, **kw).encode(obj) 
    File "/usr/lib/python2.7/json/encoder.py", line 207, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode 
    return _iterencode(o, 0) 
    File "/path/.env/lib/python2.7/_abcoll.py", line 581, in __iter__ 
    v = self[i] 
    File "/path/.env/local/lib/python2.7/site-packages/django/forms/utils.py", line 146, in __getitem__ 
    return list(error)[0] 
    File "/path/.env/local/lib/python2.7/site-packages/django/core/exceptions.py", line 165, in __iter__ 
    yield force_text(message) 
    File "/path/.env/local/lib/python2.7/site-packages/django/utils/encoding.py", line 88, in force_text 
    raise DjangoUnicodeDecodeError(s, *e.args) 
DjangoUnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128). You passed in <django.utils.functional.__proxy__ object at 0x40a6a90c> (<class 'django.utils.functional.__proxy__'>) 
+2

P1 전체 추적,보기 및 템플릿을 보여줍니다. 'form.errors'는 이미 사전입니다.'items()'을 호출하는 이유를 알지 못하고 그 결과를 다시 사전으로 변환합니다. – Alasdair

+1

^업데이트 됨. 'form.errors'에 대한 팁을 고맙다 - 거기에 overdid :) – user1931780

답변

1

. 문제는 번역에 있습니다. 이 경우 - 러시아어 현지화. 왜 "native"django 현지화 파일의 번역이 실패했는지 알지 못합니다. 하지만 비슷한 문제가 모든 사람을 위해 :

  1. 는 (아직하지 않을 경우) 로케일 파일을 작성을 (https://docs.djangoproject.com/en/1.9/topics/i18n/translation/#localization-how-to-create-language-files)

  2. django.po에 theese 행을 추가 msgid "Enter a valid email address." msgstr "Введите правильный адрес электронной почты." (또는 다른 번역이 필요)

  3. 컴파일 (django-admin compilemessages)