【问题标题】:url_for() to call static files in ajax [duplicate]url_for() 在 ajax 中调用静态文件 [重复]
【发布时间】:2018-03-22 14:30:52
【问题描述】:

我正在使用 Flask 和 JavaScript 实现自动完成功能,并且正在尝试将 JavaScript 放在不同的文件中。我的文件夹结构是这样的:

- Project
    - static
    |   -js
    |      autocomplete.js
    - templates
    |   index.html  
    main.py

如果我在index.html中添加脚本:

<script>
$(function() {
    $.ajax({
        url: '{{ url_for("autocomplete") }}'
    }).done(function (data) {
         $('#inputBox').autocomplete({
             source: data,
             minLength: 1
         });
    });
});
</script>

它工作正常,但是当我将代码放入/static/js/autocomplete.js 并在index.html 中添加&lt;script src="../static/js/autocomplete.js"&gt;&lt;/script&gt; 时, 我得到一个 404:

127.0.0.1 - - [11/Oct/2017 07:54:10] "GET /%7B%7B%20url_for(%22static%22,%22autocomplete%22)%20%7D%7D HTTP/1.1" 404 -

那么我应该如何在url_for()中写路径呢?

【问题讨论】:

  • python 代码有这样一行:@app.route('/autocomplete',methods=['GET'])。我不是从 python 调用 js,而是相反。

标签: javascript python flask jinja2


【解决方案1】:
{{ url_for('static', filename='js/autocomplete') }}

【讨论】:

    【解决方案2】:

    你会在这里找到你需要的东西: http://flask.pocoo.org/docs/quickstart/#static-files

    基本上你只需要在你的包的根目录有一个“静态”文件夹,然后你可以使用 url_for('static', filename='js/autocomplete.js') 或者直接用http://example.com/static/js/autocomplete.js链接到你的文件

    【讨论】:

    • Tnx 的答案,但你的例子是在 python 代码中调用 js。我想在js中调用python方法。
    • 您不能在 javascript 中调用 python 方法。如果你想从flask调用一个url,是否需要为这个url创建一个路由并调用那个路由。
    • 对不起,造成一些误解。如果我将上面的 javascript 与 一起放在我的 index.html 中,那么它可以完美运行。但是,如果我将脚本放在 /static/js/autocomplete.js 和 index.html 中的单个文件中,我使用 它返回 404。不能查找路径自动完成...
    • 我弄错了,对不起。检查文档后,我能够添加包含以访问 url。谢谢