Jinja2中Namespace对象无法JSON序列化问题求助
问题原因与解决解析
核心原因
虽然直接渲染{{ organization.namespace }}能显示字符串,但organization.namespace本质是Namespace类型的对象,而非原生字符串:
- Jinja2直接输出变量时,会自动调用对象的
__str__()或__repr__()方法,将其转为字符串展示; - 但
tojson过滤器会严格校验变量的原生类型,它不会自动转换非JSON可序列化的对象(比如自定义的Namespace类实例),因此抛出Object of type Namespace is not JSON serializable错误。
你的解决方法为什么有效
"" ~ organization.namespace通过字符串拼接操作,强制触发Python的类型转换机制,把Namespace对象转换成了真正的字符串类型。此时teamOrganizations里存储的是原生字符串,tojson自然能正常序列化。
其他可选方案
- 直接调用对象的字符串方法:
{{ teamOrganizations.append(organization.namespace.__str__()) or "" }} - 后端预处理:在传递给模板前,就把
organization.namespace转换为字符串存入teamOrganizations,避免在模板里做类型转换操作
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

