2012-08-29 31 views
8

私は、私のデータを私のdjangoビューからウェブに渡すJavaScriptスクリプトレットで使用するためのテンプレートに渡す必要のあるユニコード文字列を持っています。djangoからjavascriptにunicode文字列を渡します。

問題は、私は、文字列は、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を使用しようとしましたが、解決策やハッキングを打つことはできませんでした。

私は何をしますか?

+0

['escapejs']を試しましたか(https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#escapejs) –

+0

あなたのビューとテンプレートコードを表示してください。 – jpic

+0

@BurhanKhalid、 'escapejs'を使用するとシングルクォートも変換されます。しかし、それは良いヒントでした。ありがとう。 –

答えて

12

編集: Django 1.7+ no longer includes simplejson。代わりにjsonの代わりsimplejsonを使用し、その後

from django.utils import simplejson 

書き込み

import json 

のと。

あなたはおそらくあなたのデータ辞書のパイソンのreprを印刷、およびJavaScriptでそれを解析しようとしている

{{ your_python_data }} 

代わりに、あなたはJSONでデータをエクスポートできます。

from django.utils import simplejson 

json_data_string = simplejson.dumps(your_data) 

そして、データを直接javacriptにロードしてください:

var your_data = {{ json_data_string }}; 

また作ることができるtemplate filter:「データ」の一部は、ユーザー入力から来る場合、あなたは、その後、XSSには注意する必要があります

{% load your_template_tags %} 

{{ your_python_data|as_json }} 

注:

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)) 

そして、あなたのテンプレートで

それを衛生的にするべきです。

+0

ありがとう@jpicそれは働いた。私はちょうどそれを適切にレンダリングするために* safe *フィルタを追加しなければなりませんでした。だから、私のコードは次のようになります: '{{your_python_data | as_json | safe}}' –

+0

ニース、アップデートの回答.. [質問を閉じる]を忘れないでください(http://meta.stackexchange.com/questions/ 5234/how-does-accept-an-answer-work) – jpic

+0

明らかに、simpleJsonは推奨されていません。それを置き換えたものが分かっていますか? – CodyBugstein

関連する問題