将 Django 模板中的 JSON 传递给独立的 Javascript 文件

Posted

技术标签:

【中文标题】将 Django 模板中的 JSON 传递给独立的 Javascript 文件【英文标题】:Passing JSON in Django Template to Standalone Javascript File 【发布时间】:2015-11-23 04:23:12 【问题描述】:

我的views.py中有以下代码:

from django.shortcuts import render
from django.shortcuts import render_to_response
from django.http import HttpResponse
import json, requests

platformReq = requests.get(platformUrl, headers='Authorization': 'Token token="1234"')

platformData = json.loads(platformReq.text)
return render_to_response('find.html','platformList':platformData)

在我的模板文件中,我有这个:

<script src="% static "js/standalone.js" %" type="text/javascript"></script>
  <script>
    # this is where it fetches the json and formats it correctly #
    var js_variable = platformList | jsonify;
    console.log(js_variable);
    function_in_standalone_js(js_variable);
</script>

从该 console.log() 正确输出 JSON,但出现错误:

ReferenceError: function_in_standalone_js 未定义

在我的独立 Javascript 中:

var function_in_standalone_js = function(js_variable)

var options = js_variable['platforms'];
console.log(options)

这是输出的内容,以及 console.log() 给出的内容(不止 3 个,但我不想粘贴整个内容):

“平台”:[“slug”:“土星”,“id”:32,“名称”:“世嘉土星”,“slug”:“mac”,“id”:14,“ name": "Mac", "slug": "vc", "id": 47, "name": "Virtual Console (Nintendo)"]

提前致谢!

【问题讨论】:

你试过在浏览器控制台中运行function_in_standalone_js(js_variable);吗? @IanAuld 是的,我得到了同样的“未定义”错误。 js/standalone.js 是否在您的浏览器开发工具的网络选项卡中显示 404? @IanAuld 不,在网络选项卡中显示:“304:未修改”。即使我进入“查看页面源代码”,我也可以访问该文件并查看其内容。 您是否尝试将您的内嵌脚本包装在$(document).ready(function()&lt;inline stuff here&gt;) 中? 【参考方案1】:

由于模板中 JS 的加载时间不同,您应该将内联 JS 包装在 $(document).ready(function()...) 中,以确保它仅在文档的其余部分(包括外部 JS 文件)加载后运行。

<script>
    $(document).ready(function()
      var js_variable = platformList | jsonify;
      console.log(js_variable);
      function_in_standalone_js(js_variable);
    );
</script>

【讨论】:

【参考方案2】:

可能是您的standalone.js 在模板中的代码之后被加载,因此出现错误

【讨论】:

我该如何纠正这个问题?在我的模板文件中,我在列出代码之前将standalone.js 作为脚本文件列出。 编辑: 即使将独立的 js 放入我的 中,我仍然会收到错误。 做一件事定义一个没有参数的简单js函数在你的js文件中定义它并尝试在console.log()之前调用它,这样你就可以知道它是否加载了 我仍然得到错误:ReferenceError: showTest is not defined 在独立的 JS 文件中:function showTest() console.log("Test!") @AllenFernandes 显然我上面的回答没有回答你的问题......即使那个错误意味着它没有加载,显然我必须特别说明。不,它仍然无法在 console.log() 之前加载函数 showTest()

以上是关于将 Django 模板中的 JSON 传递给独立的 Javascript 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 django 模板变量传递给 js 数据表

将 request.user 传递给 Django 中的模板

将对象从模板传递给 django 视图(控制器)

将视图中的 Django 查询集传递给模板

有没有办法将变量传递给 Django 中的“扩展”模板?

将模板中的值传递给 Django 中的视图