将生成的HTML传递给JavaScript

时间:2014-02-19 12:59:25

标签: javascript python pyramid

我正在尝试将一串生成的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);
}

我做错了什么?

1 个答案:

答案 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的示例微模型引擎:

DOM tree based JavaScript template engines