代码之家  ›  专栏  ›  技术社区  ›  bard

将生成的HTML传递到JavaScript

  •  1
  • bard  · 技术社区  · 12 年前

    我试图将Python生成的HTML字符串传递给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 ,我看到我可以使用 {{ variable }} 在Javascript中也是如此,所以在我的JS文件中,我有一个函数试图用id“content-desc”更改元素的innerHTML。但我得到的只是字符串{{genHTML}},而不是包含生成的HTML的实际变量。

    function insertHTML() {
        genHTML = '{{gen_html}}';
        $('#content-desc').html(genHTML);
    }
    

    我做错了什么?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    将数据和内容从服务器端Python传递到JavaScript的一个好方法是

    • JSON嵌入HTML

    • 将JSON对象作为 application/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);
       });
    

    此外,我不会在一开始就生成只传递给JavaScript的HTML。相反,我会将原始数据作为JSON传递给JavaScript,然后使用客户端模板从这些数据在客户端生成HTML。这增加了复杂性,但更加“干净”和灵活。

    客户端JavaScript的微模板引擎示例:

    DOM tree based JavaScript template engines