如何将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框架内的模板?的主要内容,如果未能解决你的问题,请参考以下文章