将unicode字符串从django传递给javascript

时间:2012-08-29 09:13:08

标签: javascript python django unicode

我的数据中有一堆unicode字符串,我需要从我的django视图传递到模板,以便在JavaScript scriptlet中使用它来回传递给web。

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

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

我尝试过使用urqluote,smart_unicode,force_unicode,但无法解决问题,甚至无法解决问题。

我该怎么办?

1 个答案:

答案 0 :(得分:12)

编辑: Django 1.7 + no longer includes 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 }};

您还可以制作template filter

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,如果某些“数据”来自用户输入,那么您应该对其进行清理。