2

特定のテンプレートに対して呼び出し可能なビューがデータと呼ばれる値を渡すピラミッド/Pythonアプリを構築しています。この変数は、次の形式の配列です。[[[x1,y1,z1,],...],[[v1,v2,v3],...]]

私のviewcallableで私は持っています

import json

jsdata = json.dumps(data)

テンプレートのjavascriptスクリプトタグセクションに入れたいので、次のようにします。

<script>
data=${jsdata}
</script>

しかし、構文が正しくないことは間違いありません。これどうやってするの?

編集:これから:http ://docs.pylonsproject.org/projects/pyramid/en/latest/narr/templates.html Genshiスタイルの置き換えが進むべき道のようです、それは私が上に持っているものを意味すると思います正しい。ただし、javascriptタグ内にあるため、これを別の方法で処理する必要があるかどうかはまだわかりません。これは本当ですか?

4

2 に答える 2

3

Pythonリストではなく、 JavaScript配列を挿入したい。

Python形式とJavaScript形式を変換する最も簡単な方法は、jsonモジュールを使用することです。結局のところ、JSONはデータのJavaScriptサブセットです。

import json

jsdata = (json.dumps(data)
            .replace(u'<', u'\\u003c')
            .replace(u'>', u'\\u003e')
            .replace(u'&', u'\\u0026')
            .replace(u"'", u'\\u0027'))

jsdata次に、代わりにテンプレートに渡します。このstr.replace()呼び出しにより、データがHTMLで安全に保たれます。

テンプレートで、エスケープせずにこれを補間します。

<script>
var data = ${structure:jsdata};
</script>
于 2013-02-11T18:51:48.233 に答える
1

カメレオンについてはよくわかりませんが、「従来の」Zopeページテンプレートではscriptタグ内で何もできませんでした。変数が補間されていない場合は、カメレオンが同じように動作する可能性があります。私が理解しているように、この理由は、まさにこのタイプのコード生成を回避するためです(Pythonからテンプレートを介してJavaScriptを生成しています)。また、ZPTはXMLベースのテンプレート言語であり、<script>タグのコンテンツは有効なXMLである必要はありません。

問題を回避するには、次のようなことを行うことができます

jsdata = '<script type="text/javascript">var data = ' + json.dumps(data) + ';</script>'

テンプレートにすべてを挿入します。

<tal:myscript replace="structure jsdata" />

または、次のようなことを行うことができます

<tal:lt replace="string:&lt;" />script>
   var data = <tal:script replace="structure jsdata" />;
<tal:lt replace="string:&lt;" />/script>

scriptカメレオンからタグを隠すでしょう。

ページで生成されるJavaScriptの量を可能な限り最小限に抑えるようにすることをお勧めします。

于 2013-02-12T00:51:24.670 に答える