2012-01-03 7 views
11

webapp2でJinja2を使用しています。JSONがJinja2テンプレートのユニコードエンティティとして表示されています

Jinja2はすべての「コンテキスト」データをユニコードにエンコードします。

jsonData = json.loads(get_the_file('catsJson.txt')) 

私はjsonDataテンプレートに渡し、私はHTMLにJSON要素を挿入するとき、それは成功したが、それは見えループすることができるよ:私はテンプレートにJSON文字列を挿入しようとすると、これが問題に証明されますこのように:

<option value='[u&#39;dogs&#39;, u&#39;cats&#39;]'> 

私は(それが本来のJSON文字列であるように)、それは次のようになりたい:

<option value='["dogs", "cats"]'> 

任意の提案ですか?

答えて

21

safeフィルタで値をフィルタリングして、他のフィルタを出力に適用しないようにjinja2に指示する必要があります。 Jinja2の構文では、これは次のようになります。

{{ jsonData | safe }} 

(注)json.loadsを呼び出しているので、あなたが実際にもうJSONデータを持っていないことを、あなたはPythonのリストオブジェクトを持っています。したがって、シリアル化されている場合はuの接頭辞を与えるunicode(['dogs', 'cats'])を呼び出すのと同じです。実際にjsonデータを解析したくない場合や、jinja2の代わりにリストを手動で文字列に変換する必要があります。

+2

今では出力: '[u'dogs'、u'cats']' をどのように私はuの接頭辞を削除しますか? – ofko

+0

配列要素を 'str'に変換します:' map(str、jsonData) ' – Xion

+0

答えが更新され、jinja2はPythonリストを文字列に変換して、リストの文字列表現を使用します。 –

-1

Jinja 2.9では、@ Xionのアドバイスに続いて、まずmap('string')を使って繰り返し可能な要素を文字列に変換しました。マップフィルターの結果は、次にリストに変換され、最後にtojson組み込みフィルターを使用してJSONとして出力されます。

{{ jsonData|map('string')|list|tojson }} 
関連する問題