【问题标题】:Django passing json objects to jqueryDjango将json对象传递给jquery
【发布时间】:2012-04-12 11:05:51
【问题描述】:

在我看来,我正在生成一个 json 转储:

def myview:
    ... 
    data = list(queryset) # a query set of values
    json_dump = simplejson.dumps(data) 
    ...
    return render_to_response(request, 'results.html', { 'json_dump' : json_dump})

我的模板引用了一个 javascript 文件:

    $(document).ready(function() {
      // some stuff involving the json_dump var
      ...
    };

我的问题是,鉴于我无法直接将json_dump 传递给$(document).ready(function(),将json_dump 数据导入js 的最佳方法是什么?

【问题讨论】:

    标签: jquery django json


    【解决方案1】:

    如果我理解您想要做什么,您想将 JSON blob 传递到您的模板中,以便从 HTML 引用的 JS 文件可以访问它?

    在这种情况下,只需设置一个变量来接收模板中的值:

    <script type="text/javascript">
        var json_dump = "{{ json_dump }}"
    </script>
    

    现在在你的 JS 中任何你喜欢的地方使用 json_dump。

    【讨论】:

    • 要扩展,只需将 json blob 输出到模板中脚本标记内的变量。
    • 在javascript中使用模板语言不需要双引号吗?即 var json_dump="{{ json_dump }}";
    • 太好了,我删除了我的答案:)
    • 太棒了。是的 - 我发现这是这样做的方法 - 我现在遇到的问题是处理 None 值,我的 js 想要 null (但不是'null')。我应该在哪里解决这个问题 - 在视图或 js 中?
    【解决方案2】:

    上面的答案是正确的,除了你的 JSON 转储周围有引号,这可能不是你想要的。为了使用它,你必须 eval(json_dump),而不是仅仅把它作为一个对象来调用......我可能会像这样把它弄得有点像:

    <script>
      var window.json_dump = {{ json_dump|safe }};
    </script>
    
    <script>
      // Then later in your other javscript which comes AFTER the above script tags...
      $(document).ready(function() {
        alert( window.json_dump.foo );
      });
    </script>
    

    【讨论】:

    • 如果没有 |safe 修饰符,json_dump 将无法使用。
    猜你喜欢
    • 2010-10-30
    • 2017-03-02
    • 2014-06-12
    • 2016-04-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多