8

我的数据中有一堆 unicode 字符串,我需要将它们从我的 django 视图传递到模板,以便在 JavaScript 脚本中使用,该脚本将它来回传递到网络。

问题是我希望字符串以 JavaScript unicode 形式表示,但我从 python 获取带有u前缀的字符串。

例如,对于字符串mężczyźni,Python 将其存储为u'm\u0119\u017cczy\u017ani'但是当它被传递给模板时,它不会删除u前缀,这会在处理它时给 JavaScript 带来问题。我希望它只是'm\u0119\u017cczy\u017ani'以便模板中的 JavaScript 代码可以使用它。

我尝试使用 urqluote、smart_unicode、force_unicode 但无法找到解决方案,甚至无法破解。

我该怎么办 ?

4

1 回答 1

12

编辑: Django 1.7+不再包含 simplejson。代替

from django.utils import simplejson

import json

然后使用json而不是simplejson.


您可能正在打印数据字典的 python repr,并尝试在 javascript 中解析它:

{{ your_python_data }}

相反,您可以将数据导出为 json:

from django.utils import simplejson

json_data_string = simplejson.dumps(your_data)

并直接在javascript中加载数据:

var your_data = {{ json_data_string }};

您还可以制作模板过滤器

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

register = template.Library()


@register.filter
def as_json(data):
    return mark_safe(simplejson.dumps(data))

在您的模板中:

{% load your_template_tags %}

{{ your_python_data|as_json }}

请注意,您应该小心 XSS,如果某些“数据”来自用户输入,那么您应该对其进行清理。

于 2012-08-29T09:23:43.733 回答