如何将json目录传递给django框架内的模板?

Posted

技术标签:

【中文标题】如何将json目录传递给django框架内的模板?【英文标题】:How to pass json directory to the template within the django framework? 【发布时间】:2015-05-14 02:53:37 【问题描述】:

我是 D3 和 django 的新手,我希望将它们结合起来进行可视化。我下载了一个code example of D3,它需要json文件作为数据源。 然后我在 Django 中编写了一个模板,例如: `

.link 
stroke: #ccc;


.node text 
pointer-events: none;
font: 10px sans-serif;


</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>

var width = 1500,
    height = 2000

var color = d3.scale.category20();

var svg = d3.select("body").append("svg")
    .attr("width", width)
.attr("height", height);

var force = d3.layout.force()
              .gravity(.05)
              .distance(100)
              .charge(-100)
              .size([width, height]);


d3.json("file", function(error, json) 
//d3.json("all_0.0007_0.15.json", function(error, json) 
force
  .nodes(json.nodes)
  .links(json.links)
  .start();

var link = svg.selectAll(".link")
               .data(json.links)
               .enter().append("line")
               .style("stroke", function(d)  return color(d.color); )
               .attr("class", "link");


var node = svg.selectAll(".node")
              .data(json.nodes)
              .enter().append("g")
              .attr("class", "node")
              .call(force.drag);
     //.on('dblclick', connectedNodes); //Added code 

node.append("circle")
    .attr("r", function(d)  return d.degree;)
    .style("fill", function (d) return color(d.group);)

node.append("text")
    .attr("dx", 3)           //It means the offset of label and circle
    .attr("dy", ".35em")
    .text(function(d)  return d.name )
    .style("font-size",function(d)  return d.degree*2+'px' )
    .style("stroke", "gray");  



force.on("tick", function() 
    link.attr("x1", function(d)  return d.source.x; )
    .attr("y1", function(d)  return d.source.y; )
    .attr("x2", function(d)  return d.target.x; )
    .attr("y2", function(d)  return d.target.y; );

    node.attr("transform", function(d)  return "translate(" + d.x + "," + d.y + ")"; );
  );
);

</script>`

我尝试将我计算机中的目录传递给模板中的 file。但似乎即使模板与 json 文件位于同一文件夹中,浏览器也找不到 json 文件。 谁能告诉我如何将本地计算机中的 json 文件目录传递给模板?提前致谢。

【问题讨论】:

你传入的是 http:// URL 还是 file:/// URL? file:/// 在大多数浏览器中不起作用,请尝试传入 http:// URL。您可能需要 django 将其视为静态文件,因此请将其放在 STATIC_URL 指向的文件夹中。 感谢您的回复。是的,file:/// 不能工作。但是,当我使用 python 中的内置服务器(如“localhost:8888”)并使用该目录列表时,firefox 再次拒绝它,因为“跨源请求被阻止:同源策略不允许读取localhost:8888/all_0.0007_0.15.json 的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。我该如何解决? 【参考方案1】:

Django 不会以这种方式提供静态页面。

因为到达 Django 服务器的每个请求(在您的情况下为 http:localhost:8888)都会通过 Django 的 URL Dispatcher(https://docs.djangoproject.com/en/1.7/topics/http/urls/)进行路由,因此您需要设置 Django url 路由来处理您可能想要的每个 url,否则 Django 将只需 404 请求。

为了提供静态文件,您需要设置 Django 以提供静态内容 (https://docs.djangoproject.com/en/1.7/howto/static-files/)。

【讨论】:

以上是关于如何将json目录传递给django框架内的模板?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何将javascript变量传递给django模板标签

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

如何将变量传递给自定义 Django 模板加载器?

django - 如何将多个值传递给模板标签

django:如何将模板变量传递给 javascript onclick 例程?