使用Jinja传递Flask后端变量到JS时None值转JSON报错如何解决
解决方案
- 方案1:Jinja模板层加默认值兜底
搭配Jinja内置的default过滤器即可同时覆盖值为None、键不存在的场景,default第二个参数设为true时会对Python的None值生效,之后再用tojson转换就能避免报错,同时保证输出内容符合JS语法规范。
如果restricted_roles为数组类型,可设置默认值为空数组:
const restrictedRoles = {{ find_application_data["restricted_roles"] | default([], true) | tojson }}
如果需要无数据时不进入后续判断分支,可将默认值设为null,此时if(restrictedRoles)判断会直接不通过:
const restrictedRoles = {{ find_application_data["restricted_roles"] | default(null, true) | tojson }}
tojson过滤器会自动将Python数据类型转换为JS兼容的格式:Python的None转JS的null、列表转JS数组、字典转JS对象,完全不会出现语法错误。
- 方案2:后端提前统一处理默认值
在Flask视图返回模板数据前,提前对restricted_roles字段做兜底处理,从根源避免None值传递到模板层:
# 数据库查询逻辑 find_application_data = your_query_function() # 兜底处理 if find_application_data.get("restricted_roles") is None: # 可根据业务需求设置默认值为空数组或者null find_application_data["restricted_roles"] = []
处理完成后模板中直接用|tojson即可:
const restrictedRoles = {{ find_application_data["restricted_roles"] | tojson }}
额外注意:你现有代码中后续循环使用的
enabledRoles变量未提前定义,看起来是笔误,需要修正为restrictedRoles否则会触发未定义报错。
内容的提问来源于stack exchange,提问作者jaal kamza
相关产品推荐
相关产品推荐

