簡體   English   中英

如何將JSON插入zope變色龍模板的腳本時代?

[英]How can I insert JSON into a script tage in a zope chameleon template?

我正在構建一個pyramid / python應用程序,其中可為特定模板調用的視圖將傳入一個名為data的值。 此變量是[[[x1,y1,z1,],...],[[v1,v2,v3],...]]形式的數組

在我看來,我有

import json

jsdata = json.dumps(data)

我想將其放入模板的javascript腳本標簽部分,以便:

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

但我很確定語法不正確。 我怎樣才能做到這一點?

編輯:從這里: http ://docs.pylonsproject.org/projects/pyramid/zh-CN/latest/narr/templates.html看來,Genshi樣式替換是要走的路,我認為這是我上面提到的內容是正確的。 但是,我仍然不確定是否應該區別對待,因為它在javascript標記內。 這是真的?

您要插入JavaScript數組,而不是Python列表。

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

我不確定Chameleon,但是“經典的” Zope頁面模板不允許在script標簽內做任何事情-如果您看不到內插的變量,則Chameleon的行為可能相同。 據我了解,這樣做的原因是完全避免了這種類型的代碼生成(您正在通過模板從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數量盡可能少是一個好習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM