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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:42:02