2017-10-11 8 views
0

私はFlaskとJavaScriptでオートコンプリートを実装しています。JavaScriptを別のファイルに入れようとしています。マイフォルダ構造は次のようである:ajaxで静的ファイルを呼び出すurl_for()

- 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<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()http://flask.pocoo.org/docs/quickstart/#static-files

は基本的にあなたがちょうどあなたのパッケージのルートに「静的」フォルダを必要とし、その後はなurl_for(「静的」、ファイル名=の 'がJSを使用することができます。

+0

であなたのファイルへのリンクのように:app.route(@' /オートコンプリート」、メソッド= [ 'GET'])。私はPythonからjsを呼び出すのではなく、反対に。 –

+0

両方の重複を慎重に読んでください。これは間違いなく重複しています。静的ファイルはレンダリングされません。 'url_for'のようなものをレンダリングするには、テンプレートが必要です。答えは – davidism

答えて

1

あなたがここで必要なものを見つけることができます/autocomplete.js ')、または直接はPythonのコード行を持っているhttp://example.com/static/js/autocomplete.js

+0

Tnxですが、あなたの例ではPythonコードでjsを呼び出しています。私はjsでpythonメソッドを呼び出したい。 –

+0

javascript内のpythonメソッドを呼び出すことはできません。フラスコからURLを呼び出す場合は、このURLの経路を作成してその経路を呼び出す必要があります。 – Gui

+0

ご迷惑をおかけいたしますが、ご了承ください。上記のjavascriptをというindex.htmlに入れれば、それは完全に機能します。しかし、私がスクリプトを/static/js/autocomplete.jsとindex.htmlの個々のファイルに入れたら、を使って404を返します。パスの自動補完が見つかりません... –

2
{{ url_for('static', filename='js/autocomplete') }} 
関連する問題