내 사이트를 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__'>)
P1 전체 추적,보기 및 템플릿을 보여줍니다. 'form.errors'는 이미 사전입니다.'items()'을 호출하는 이유를 알지 못하고 그 결과를 다시 사전으로 변환합니다. – Alasdair
^업데이트 됨. 'form.errors'에 대한 팁을 고맙다 - 거기에 overdid :) – user1931780