如何在JavaScript中使用Django模板标签返回的字典数组数据
问题根因
你遇到的报错本质是Django默认开启的HTML自动转义导致的:模板输出的JSON字符串里的双引号、单引号等特殊字符会被转义为"、'这类HTML实体,破坏了原JSON结构,所以解析时会触发Unexpected token &的语法错误。
可行解决方案
方案1:在模板标签返回值上添加safe过滤器(最简便)
Django的safe过滤器会告诉模板引擎该内容不需要转义,可以直接输出。你不需要修改现有模板标签的逻辑,直接在调用标签时添加过滤器即可:
// 符合JS语法的JSON结构可以直接作为JS对象/数组使用,不需要额外JSON.parse const testVal = {% messageRequest | safe %};
如果你的模板标签返回的是已经序列化好的JSON字符串,上面的写法可以直接正常运行。
方案2:在自定义模板标签内部标记返回值为安全内容
如果你要在多个地方调用这个模板标签,不想每次都加safe过滤器,可以直接在模板标签的Python代码里标记返回值为安全字符串,避免自动转义:
from django.utils.safestring import mark_safe import json # 你的模板标签逻辑示例 @register.simple_tag def messageRequest(): data = [{"key1": "value1"}, {"key2": "value2"}] # 序列化后用mark_safe标记为安全内容 return mark_safe(json.dumps(data))
模板里直接调用即可,不需要额外处理:
const testVal = {% messageRequest %};
方案3:使用escapejs过滤器适配字符串包裹场景
如果你一定要用字符串包裹后再JSON.parse的写法,可以搭配escapejs过滤器处理转义:
const testVal = JSON.parse("{% messageRequest | escapejs %}");
这个方案适合需要先把内容存为字符串再按需解析的场景。
内容的提问来源于stack exchange,提问作者Utkarsh Tyagi
相关产品推荐
相关产品推荐

