【问题标题】:Flask to external javascript variable transferring failure? [duplicate]烧瓶到外部javascript变量传输失败? [复制]
【发布时间】:2018-09-03 09:39:18
【问题描述】:

我想将文件名从我的 app.py 解析为 graph.js。但我无法将变量名添加到 js 文件中。我正在使用烧瓶

这是文件结构

- app/
  - flask_app.py
  - templates/
    -> index.html
    -> data/
      -> file1.csv
  - static/
    -> js/
      -> create-graph.js

我的应用看起来像这样(相关部分):

data_files = ["file1.xlsx", "file2.xlsx", "file3.xlsx"]
cur = 0
df1 = pd.read_excel("data/" + data_files[cur])

df1.to_csv('templates/data/' + data_files[cur][:10] + '.csv', encoding='utf-8', index=False)

所以我有从 xlsx 转换为 csv 的文件,然后我想提取 csv 文件及其名称。我需要将data_filescur 传递给我的.js 文件... 这是相关的.js:

function parseData(createGraph) {
var name = '{{data_files[cur][:10]}}';
console.log(name);
Papa.parse("static/data/" + name + ".csv", {
    download: true,
    complete: function(results) {
        createGraph(results.data);
    }
});

}

但是好像不能把文件名传到这里:var name = '{{data_files[cur][:10]}}';

在控制台上它给了我完全相同的字符串

那么我做错了什么?

我也尝试将此添加到应用程序:

@app.route('/create-graph.js')
def script():
    return render_template('create-graph.js', fileName="data_files[cur][:10]")

仍然没有运气......

如果有人问,这里是我如何调用 .js 文件:

...
<script src="{{ url_for('static', filename='js/create-graph.js') }}"></script>
...

【问题讨论】:

    标签: python flask


    【解决方案1】:

    您需要将参数作为具有所需值的变量传递给render_template。

    如果你只有一个文件,那么你可以使用。

    app.py

    ​​>
    @app.route('/create-graph.js')
    def script():
        data_file = "test.csv"
        return render_template('create-graph.js', file_name=data_file)
    

    .js 文件

    function parseData(createGraph) {
    var name = '{{file_name}}';
    console.log(name);
    Papa.parse("static/data/" + name + ".csv", {
        download: true,
        complete: function(results) {
            createGraph(results.data);
        }
    });
    }
    

    如果data_files是列表的列表或者列表的字典。

    .js

    function parseData(createGraph) {
    var name = '{{data_files_cur[:10]}}'; // here you can get at max 10 files
    console.log(name);
    Papa.parse("static/data/" + name + ".csv", {
        download: true,
        complete: function(results) {
            createGraph(results.data);
        }
    });
    }
    

    app.py

    ​​>
    @app.route('/create-graph.js')
    def script():
        # define cur  and data_files
        data_files_cur = data_files[cur];
        return render_template('create-graph.js', data_files_cur=data_files_cur)
    

    看来你对flask模板引擎语法不太了解。我建议您阅读有关 Jinja/Mako 或 Django 模板语法的内容。

    【讨论】:

    • 不,它不起作用..我正在做同样的事情。
    • @BedirTapkan 你能把你的完整代码粘贴到 pastebin 并分享链接吗?
    猜你喜欢
    • 2020-12-21
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2017-10-15
    相关资源
    最近更新 更多