rest_auth中ugettext_lazy返回字符列表而非字符串的原因
问题原因分析
这个问题的核心在于ugettext_lazy返回的不是普通字符串,而是一个延迟加载的特殊对象。它的设计初衷是为了在真正需要使用翻译内容的时候才执行翻译操作,而不是在代码加载阶段就完成。
当你把这个lazy对象直接放进字典并传给Response时,默认的JSON序列化器会把它当成可迭代对象来处理——因为这个lazy对象实现了迭代器接口,序列化器会逐个遍历它的字符,最终就把整句话拆成了单个字符的列表。
解决办法
这里有几个简单的修复方案,你可以根据自己的场景选择:
强制转换为字符串:在把翻译内容放进响应字典前,先用
str()把lazy对象转换成普通字符串:return Response({"detail": str(_("New password has been saved."))})使用Django的
JsonResponse:如果是普通Django视图,改用JsonResponse替代Response,它会自动处理lazy翻译对象,正确序列化为字符串:from django.http import JsonResponse return JsonResponse({"detail": _("New password has been saved.")})确认使用DRF的
Response:如果你用的是Django REST Framework,确保导入的是rest_framework.response.Response,DRF的默认渲染器会正确识别并处理ugettext_lazy对象,不需要额外转换。
内容的提问来源于stack exchange,提问作者김윤재
相关产品推荐
相关产品推荐

