You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者김윤재

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:45:41