8

私のデータには、Web にやり取りする JavaScript スクリプトレットで使用するために、django ビューからテンプレートに渡す必要がある Unicode 文字列がたくさんあります。

問題は、文字列を JavaScript Unicode 形式で表現したいのですが、 python からuプレフィックスが付いた文字列を取得することです。

たとえば、文字列mężczyźniの場合、Python はそれをu'm\u0119\u017cczy\u017ani'として保存しますが、テンプレートに渡されると、処理中に JavaScript に問題を引き起こすuプレフィックスを削除しません。テンプレートの JavaScript コードで使用できるように、単純に「m\u0119\u017cczy\u017ani」にしたいのです。

urqluote、smart_unicode、force_unicode を使用してみましたが、解決策やハックさえヒットしませんでした。

私は何をしますか ?

4

1 に答える 1

12

編集: Django 1.7+には simplejson が含まれなくなりました。それ以外の

from django.utils import simplejson

書きます

import json

jsonの代わりに使用しsimplejsonます。


おそらく、データ dict の 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 に答える