将unicode字符串从django传递给javascript

Kni*_*mar 8 javascript python django unicode

我的数据中有一堆unicode字符串,我需要从django视图传递给模板,以便在JavaScript scriptlet中使用,并将其传递给Web来回.

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

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

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

我该怎么办 ?

jpi*_*pic 12

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

from django.utils import simplejson
Run Code Online (Sandbox Code Playgroud)

import json
Run Code Online (Sandbox Code Playgroud)

然后用json而不是simplejson.


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

{{ your_python_data }}
Run Code Online (Sandbox Code Playgroud)

相反,您可以在json中导出数据:

from django.utils import simplejson

json_data_string = simplejson.dumps(your_data)
Run Code Online (Sandbox Code Playgroud)

并直接在javascript中加载数据:

var your_data = {{ json_data_string }};
Run Code Online (Sandbox Code Playgroud)

您还可以制作模板过滤器:

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))
Run Code Online (Sandbox Code Playgroud)

在您的模板中:

{% load your_template_tags %}

{{ your_python_data|as_json }}
Run Code Online (Sandbox Code Playgroud)

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

  • 本机json模块 (2认同)