2016-07-23 5 views
2

私は小さなFlaskアプリケーションを開発しており、Pythonからjavascript配列にアクセスしてcsvとして印刷する方法を見つけるのが難しいです。Python/Flaskでjavascript変数を返します

私のフラスコファイルの一般的なセットアップは、(私は、これが機能しているかどうかを確認するために、コンソールで印刷しようとしていますし、私は後にCSVファイルとして書くことができます)です。

from flask import Flask, render_template, request 
@app.route('/assemblies', methods=['GET', 'POST']) 
def assemblies(): 
    myColours = request.form.get('colours', type=str) 
    print myColours 
    return render_template('assemblies.html') 
if __name__ == '__main__': 
    app.run(debug=True) 

その後、私のhtml Iに

<select id="Layer1"> 
    <option value="0">Empty</option> 
    <option value="1">Blue</option> 
    <option value="2">Red</option> 
    <option value="3">White</option> 
    <option value="4">Gray</option> 
</select><br> 

私はこのようにJavaScriptで選択した値にアクセスします:

function getColours() { 
    var c = document.getElementById("Layer1"); 
    var colour = c.options[c.selectedIndex].value; 
    return colour; 
} 

とのドロップダウンセレクタを持っていますHTMLは、私は結果を投稿するフォームを使用します。

<form method="post"> 
    <button onclick="getColours()" type="submit" value="colour">Click me</button>  
</form> 

私はHTMLボタンを投稿している知っているが、私はPythonで結果にアクセスすることはできません。私はFlaskには新しく、他の質問やチュートリアルでは問題を見つけることができません。どんな助けも大歓迎です。

+1

私は同様の質問があります:http://stackoverflow.com/questions/32390539/how-to-pass-javascript-variable-to-macros-in-jinja2-template – Rohanil

+0

投稿はどこにありますか、アクションは定義されておらず、その方法ではありません。 –

+0

多くの色または1つの色を選択しますか? – roy

答えて

1
from flask import Flask, request, render_template 

app = Flask(__name__) 

@app.route('/assemblies') 
def assemblies(): 
    mycolours = request.form.get('colours') 
    return render_template('assemblies.html', mycolours=mycolours) 

@app.route('/select') 
def select(): 
    return render_template('select.html') 
if (__name__ == "__main__"): 
    app.run(debug=True) 

select.html

<form action="/assemblies" method=['GET', 'POST']> 
    <select name="colours"> 
     <option value="0">Empty</option> 
     <option value="1">Blue</option> 
     <option value="2">Red</option> 
     <option value="3">White</option> 
     <option value="4">Gray</option> 
    </select> 
    <br> 
    <input type="submit" value="submit">  
</form> 

アセンブリ.htmlテンプレート:

<p>{{mycolours}}</p> 

mycoloursの出力は、選択した値です。たとえば、emptyを選択すると、0が出力され、whiteを選択すると、3が出力されます。

+0

そのトリックをした、ありがとう。ワンクリックで様々な「選択」フォームをどのように提出しますか? (たとえば、colours1、colours2、colours3など) – vabm

1

のは、あなたのpythonが右であり、あなたはあなたのコードは次のようになりますアセンブリを投稿する必要があると仮定しましょう:そう、それを避けることができる場所

<form action="/assemblies" method="post"> 
    <select name="colours"> 
    <option value="0">Empty</option> 
    <option value="1">Blue</option> 
    <option value="2">Red</option> 
    <option value="3">White</option> 
    <option value="4">Gray</option> 
    </select> 
    <br> 
    <button type="submit">Click me</button>  
</form> 

JSは避けるべき:)、これは動的なものではありませんEmptyが選択されている場合など、これはcolor = "0"の投稿要求を送信します。

+0

さまざまな「選択」フォームを提出するにはどうすればよいですか? – vabm

0

評判が低いため、直接回答として投稿してください。

お客様の選択には、name属性はありません。 POSTの一部として送信されることはありません。それにname属性と同様に値を与える:

<select id="Layer1" name="layer"> 

あなたはMultiDict.getlist()を使用して、リストのすべての値を取得できます。

request.form.getlist('layer') 
関連する問題