python - 使用 EmailField 调用 form.errors 期间出现 DjangoUnicodeDecodeError

标签 python json django unicode django-1.9

我正在将我的网站移植到 django 1.9,但不知道如何正确解决此问题。

在我的表单中,我有 django 表单中常用的 EmailField。如果验证失败,它应该是有关它的消息(我将 'form_errors': form.errors} 传递给上下文进行操作)。

但在这种情况下 django 返回

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

django.core.validators中有一个验证器

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

如果我将消息更改为 message = 'error' 一切正常。

那么,问题:如何在不编辑 django 文件的情况下解决这个问题?

问题出在调用 form.errors 时,即使我只想打印它也会引发此错误。 (打印 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__'>)

最佳答案

嗯。问题出在翻译上。在这种情况下 - 俄语本地化。 不知道为什么从“本地”django 本地化文件的翻译失败。 但对于所有有类似问题的人:

  1. 创建(如果仍然没有)区域设置文件 ( https://docs.djangoproject.com/en/1.9/topics/i18n/translation/#localization-how-to-create-language-files )

  2. 将这些行添加到 django.po: msgstr "输入有效的电子邮件地址。" msgstr "Введите правильный адрес электронной почты." (或您需要的其他翻译)

  3. 编译(django-admincompilemessages)

关于python - 使用 EmailField 调用 form.errors 期间出现 DjangoUnicodeDecodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772066/

相关文章:

php - Android/JSON : org. json.JSONException : Value of type java. lang.String 无法转换为 JSONObject

python - 涉及 ?q= 搜索查询的 URL 的 Django 正则表达式模式不起作用

django - 如何将服务器端游标与 django 和 psycopg2 一起使用?

python - 使用日期的 Django 模板条件语句

python - 在 OpenCV 返回图像中裁剪旋转 90 度

javascript - Django 欧芹 : uncaught error

Python-如何解决UnicodeEncodeError

python - 合并多个已排序的大文件--python

jquery - 将来自 ajax 的数据存储到 JSON 变量以供以后使用

python - 如何让 python base64 编码与 json 兼容?