2013-11-10 82 views
2

如何從Jinja2(使用Python)將字典傳遞給Javascript? 我的字典在Python,當我使模板我需要使用使用Javascript那本字典,我從Python的如何將Jinja2(使用Python)的字典傳遞給Javascript?

通過
template = JINJA_ENVIRONMENT.get_template('sm.html') 
self.response.write(template.render(values=values)) 

但如何將它們存儲在HTML頁面內JavaScript變量。

回答

3

使用json模塊將Python數據轉換爲JSON數據; JSON是JavaScript的*的一個子集,並作爲一個JavaScript字面做精:

import json 

js_value = json.dumps(python_value) 

並呈現在模板中js_value

如果您需要的JSON數據是HTML安全太多,你需要添加一些替代品:

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

* JSON允許U+2028 and U+2029 characters其JavaScript的文字不能包含,但json.dumps()函數默認情況下會轉義所有非ASCII代碼點,所以假設您不禁用ensure_ascii,那麼您很好。

+0

{{js_value |安全}}似乎更方便 – LeonF

+0

@LeonF:應用安全最佳實踐並不總是'方便'。 '|安全「不適用*任何過濾*,因此任何不安全的內容都會傳遞到您的模板中。 –

+0

@LeonF:in * Flask *,當您使用['tojson'過濾器](http://flask.pocoo.org/docs/0.12/templating/#standard-filters)時,替換項會被照顧。在Flask之外,你可以使用這篇文章中的技術來創建一個類似的過濾器。 –

1

你想存儲它爲Json。這是javascript的原生格式,因此您可以直接將其傳遞給變量。