使用html数据属性

时间:2015-12-11 02:54:00

标签: javascript python json django django-templates

我需要将一些数据传递给javascript。所以我创建了一个template tag

from django.utils.safestring import mark_safe
from django import template
import json

register = template.Library()

@register.simple_tag
def mydata():
    return mark_safe(json.dumps([("a", 1), ("b", 2)])

然后在我的模板中,

<div id="mydata" data-stuff="{% mydata %}" style="display:none;"></div>

在jquery加载的js文件中使用了它:

$('#mydata').data('stuff') //automatically does JSON.parse

问题是来自"a""b"的引号会破坏HTML属性语法。我可以简单地更改为单引号(data-stuff='{% mydata %}')但是有更明确的django方法将JSON注入模板吗?也许类似于escape_my_jsonescape_for_html_attribute函数。

1 个答案:

答案 0 :(得分:1)

尽管将json存储在属性中有点麻烦,但单引号(撇号,U + 0027)不是JSON中的有效字符串分隔符。有些浏览器可能会遇到此问题,但我不能指出任何问题。

如果JSON结构不复杂,则将每个字段存储为单独的数据 - *,否则存储在JS中。

如果你需要使用属性...真的,真的...我不会替换引号(简单的替换将是松散的)更可能用base64编码它。

关于转义的注意事项:要转义双引号(单个引号),您可以使用过滤器addslashes(或在python django.template.defaultfilters.addslashes中),但它不能识别json数据,因此它可能会中断。 / p>