我正在尝试将一串生成的HTML从Python传递给Javascript。这是我的视图的简化版本(使用Pyramid框架)。
@view_config(route_name='view_page', renderer='templates/page.jinja2', permission='view')
def view_cosmeceutical(request):
gen_html = markdown( ingredient.desc )
return dict(gen_html=gen_html)
从this thread开始,我看到我也可以在Javascript中使用{{ variable }}
,所以在我的JS文件中,我有一个函数试图用id'内容改变元素的innerHTML-降序”。但我得到的只是字符串{{genHTML}},而不是包含生成的HTML的实际变量。
function insertHTML() {
genHTML = '{{gen_html}}';
$('#content-desc').html(genHTML);
}
我做错了什么?
答案 0 :(得分:2)
将数据和内容从服务器端Python传递到JavaScript的一种好方法是
JSON嵌入HTML
将提供JSON对象的AJAX调用分开为application/json
mime
对于嵌入方法,我会沿着这些行做一些事情,将数据作为JSON导出到页面模板:
import json
gen_html = ...
javascript_data = json.dumps(dict(gen_html=gen_html))
return dict(javascript_data=javascript_data)
然后在页面模板中将此传递给JavaScript全局变量:
<script>
window.javascriptData = {{javascript_data}}; // Check need to escape HTML in your case
</script>
然后在JavaScript中(最好保留在一个单独的静态.JS文件中):
$(document).ready(function() {
$('#content-desc').html(window.javascriptData.gen_html);
});
另外,我不会生成HTML,因为它首先只是将它传递给JavaScript。相反,我会将原始数据作为JSON传递给JavaScript,然后使用客户端模板从客户端生成HTML数据。这增加了复杂性,但更“干净”和灵活。
客户端JavaScript的示例微模型引擎: