2015-11-17 56 views
0

我期待通過點擊我的網頁上的HTML鏈接來處理python腳本。這裏是JavaScript我到目前爲止處理click:Python瓶Web應用程序將不會得到用戶輸入

<script type="text/javascript"> 
    var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};</script> 
<script type="text/javascript"> 
    $(function() { 
     var submit_form = function(e) { 
      $.getJSON($SCRIPT_ROOT + '/_add_numbers', { 
       a: $('input[name="a"]').val(), 
       b: $('input[name="b"]').val() 
      }, function(data) { 
       $('#result').text(data.result); 
       $('input[name=a]').focus().select(); 
      }); 
      return false; 
     }; 
     $('a#calculate').bind('click', submit_form); 

     $('input[name=a]').focus(); 
    }); 
</script> 

而且下面是Python腳本我有,它採用瓶獲得相應的用戶輸入:

import os 
from flask import Flask, jsonify, render_template, request 

app = Flask(__name__) 

@app.route('/_add_numbers') 
def add_numbers(): 
    a = request.args.get('a', 0, type=int) 
    b = request.args.get('b', 0, type=int) 
    return jsonify(result=a + b) 

@app.route('/') 
def index(): 
    return render_template('index.html') 

if __name__ == '__main__': 
    port = int(os.getenv('PORT', 8080)) 
    host = os.getenv('IP', '0.0.0.0') 
    app.run(port=port, host=host) 

的HTML代碼沒有按」 t因爲它在大括號上返回一個錯誤,所以與行var $SCRIPT_ROOT = {{ request.script_root|tojson|safe }},一樣。當我用我的應用程序的根URL替換它時,我似乎無法讓我的網頁實際更新python腳本的結果。有什麼建議麼?

我使用雲9作爲我的IDE,它使用Apache託管。我對Javascript和Flask都很陌生,我真的希望得到這個基本的應用程序,所以我可以繼續學習!

+0

所以你告訴'{{request.script_root | tojson |安全}};'這會導致問題? –

+0

您的JavaScript代碼是在JavaScript文件還是Jinja模板中?靜態內的文件按原樣提供。您需要在模板中定義'$ SCRIPT_ROOT'。 – dirn

回答

0

然而,它應該工作,但爲了簡單起見,你可以簡單地將其刪除,燒瓶將它解析爲相對路徑。改變你的index.html,它會起作用。

提示:保持一定要把您的index.html 「模板」 目錄下,並在你的終端上運行,或命令提示符 「蟒蛇site.py」

main_dir 
    |--site.py 
    |--templates 
      |--index.html 

的index.html:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 

<script type="text/javascript"> 
    $(function() { 
     var submit_form = function(e) { 
      $.getJSON('/_add_numbers', { 
       a: $('input[name="a"]').val(), 
       b: $('input[name="b"]').val() 
      }, function(data) { 
       $('#result').text(data.result); 
       $('input[name=a]').focus().select(); 
      }); 
      return false; 
     }; 
     $('a#calculate').bind('click', submit_form); 

     $('input[name=a]').focus(); 
    }); 
</script> 
<input name="a" /> 
<input name="b" /> 
<a href="#" id="calculate">calculate</a> 
<div id="result"></div>