2017-10-11 60 views
0

我使用Flask和JavaScript实现了自动完成功能,并试图将JavaScript放入不同的文件中。我的文件夹结构是这样的:url_for()调用ajax中的静态文件

- 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.jsindex.html添加<script src="../static/js/autocomplete.js"></script>, 我得到一个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()中写下路径?

+0

的Python代码中有一行像:@ app.route('/自动完成”,方法= [ 'GET'])。我不是从python调用js,而是相反。 –

+0

仔细阅读这两个重复。这绝对是重复的。不呈现静态文件。如果你想呈现诸如'url_for'之类的东西,你需要一个模板。 – davidism

回答

1

你会发现你所需要的是什么: http://flask.pocoo.org/docs/quickstart/#static-files

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

+0

Tnx的答案,但你的例子是在python代码中调用js。我想在js中调用python方法。 –

+0

你不能在javascript中调用python方法。如果你想从flask中调用url,你需要为这个url创建一个路由并且调用这个路由。 – Gui

+0

对不起,有些误解。如果我把上面的javascript放在我的index.html中,使用那么它就可以很好地工作。但是,如果我将脚本放在/static/js/autocomplete.js和index.html中的单个文件中,则使用它返回404.无法找到路径自动完成... –

2
{{ url_for('static', filename='js/autocomplete') }}