7

辞書を django テンプレートに渡そうとしています。django ビューでは、変数が初期化され、次のように渡されます。

foo = {'a':'b'}
...
return render(request, 'template.html', {'foo': str(foo)}

テンプレートには、

{{ foo|default:"{}"|safe}}

関連する場合に備えて、上記の行をjqueryスニペットに入れています。dictが次のようにレンダリングされているため、そのスニペットは失敗しています

[{'a': u'b'}] 

私が期待するものの代わりに:

[{'a': 'b'}] 

安全なフィルターが dict 値 'b' の前にあるユニコード u を削除していないようです。それ、どうやったら出来るの?

4

2 に答える 2

5

JSONとデフォルトのPython文字列化には微妙な違いがあるため、関数を使用して明示的にJSONに変換する必要があります。

  • JSONの文字列は、技術的にはで"はなくで区切る必要があります'が、パーサーは後者も受け入れる傾向があります(json.orgの文字列ルールを参照) 。

  • ブールリテラルは小文字です

  • データに数値、文字列、リスト、辞書以外のものが含まれている場合、strそれらを使用すると、おそらくサイレントに無効なJSONが生成されます

django-jsonifyなどのテンプレートフィルターを使用します。

{% load jsonify %}
...
{{ foo|jsonify }}
于 2013-03-23T16:13:23.240 に答える
0

この問題が発生した理由は、辞書に実際に Unicode 値が含まれていたためです。上記のおもちゃの例は簡略化したものです。str(val)val を dict に挿入する前に実行すると、期待どおりにレンダリングが行われました。

于 2013-03-23T11:07:26.523 に答える