【问题标题】:How can I send a csv file to d3.js in Django?如何在 Django 中将 csv 文件发送到 d3.js?
【发布时间】:2015-03-27 20:17:32
【问题描述】:

我目前正在使用 Django+D3.js。 并且模板(viewCSV.html)包含一个需要 csv 文件的 js 函数:

d3.text("{{ file }}", function(data) {
            var parsedCSV = d3.csv.parseRows(data);

            var container = d3.select("body")
                .append("table")

                .selectAll("tr")
                    .data(parsedCSV).enter()
                    .append("tr")

                .selectAll("td")
                    .data(function(d) { return d; }).enter()
                    .append("td")
                    .text(function(d) { return d; });
        });

不使用Django,函数应该是d3.text("train.csv", function(data) {...}

现在我在 views.py 中编写以下代码

def viewCSV(request):
    fp = open('train.csv', 'rb')
    data = fp.read()
    variables = RequestContext('viewCSV.html', {'file': data})
    t = get_template('viewCSV.html')
    output = t.render(variables)
    return HttpResponse(output)

顺便说一下,viewCSV.html 和 train.csv 在 Django 项目下的同一个文件夹中。

当我运行服务器并访问 url 时,我得到了

/viewCSV/ 处的属性错误 “str”对象没有属性“META”

我只想让 js 读取 csv 文件。 我不知道如何实现它。
谁能帮我解答这个问题?
提前致谢。

【问题讨论】:

    标签: javascript python django csv d3.js


    【解决方案1】:

    RequestContext 的第一个参数是请求,而不是模板名称。

    不过,不需要所有这些冗长的东西:函数的最后四行可以替换为:

    return render(request, 'viewCSV.html', {'file': data})
    

    其中render 是从django.shortcuts 导入的。

    【讨论】:

    • 但是d3.text 不期望 URL 作为输入吗?
    【解决方案2】:

    您想在模板中插入文件名,而不是文件的内容。看起来您正在将数据读取到视图函数中,然后将数据插入到模板中。只需插入文件名,然后让d3.text 做它的事情(你也可以使用d3.csv,这是我会使用的)。

    即:

    def viewCSV(request):
        variables = RequestContext(request, {'file': 'train.csv'})
        t = get_template('viewCSV.html')
        output = t.render(variables)
        return HttpResponse(output)
    

    并像@Daniel Roseman 那样做(顺便说一句,我就是这样做的)

    def viewCSV(request):
        return render(request, 'viewCSV.html', {'file': 'train.csv'})
    

    【讨论】:

      猜你喜欢
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      相关资源
      最近更新 更多