在 django 内的 d3.js 中加载 .csv 文件不起作用

Bou*_*ros 1 django d3.js

我试图在 javascript 中加载 django 内的 csv 文件,但它给了我一个错误:http://127.0.0.1:8000/data.csv is not find , data.csv 位置位于包含 html 页面的 templates 文件夹内。

我的代码:

    d3.csv("data.csv", function(d, i, columns) {
    for (var i = 1, n = columns.length; i < n; ++i)
             d[columns[i]] = +d[columns[i]];
             return d;
     }, function(error, data) {
       if (error) throw error;
       }
Run Code Online (Sandbox Code Playgroud)

bka*_*wan 5

首先,您需要了解 Django 服务器如何工作并在 Django link中提供静态文件。

您不能仅将静态文件加载为 d3.csv("data.csv")

然后按照以下步骤操作

1.在settings.py中添加以下内容

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
Run Code Online (Sandbox Code Playgroud)

2.在根项目文件夹中创建静态文件夹并在静态文件夹中添加csv文件

3.您需要提供静态文件并加载

  • {% load static %} 在顶部
  • {% 静态“data.csv”%}

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<h1>hello d3</h1>
<div>
</div>
<script>
    d3.csv('{%  static 'data.csv' %}', function (err, csv) {
        console.log(csv)
    });
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

如果您的文件不是静态的并且用户上传的媒体文件,只需替换 d3.csv 代码,如下所示。在此之前,您需要在设置中添加 MEDIA_URL 和 MEDIA_ROOT,如下所示

  • 设置.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

Run Code Online (Sandbox Code Playgroud)
  • 可视化.html
<script>
d3.csv('{{ object.file.url}}', function (err, csv) {
        console.log(csv)
    });
</script>
Run Code Online (Sandbox Code Playgroud)