2016-07-23 134 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我有一個下拉選擇:

<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

你想選擇多種顏色還是一種顏色? – 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那裏可以避免:)這是不是動態的,所以例如,如果選擇空白,則會發送顏色=「0」的帖子請求

+0

如何用各種'select'提交表單? – vabm

0

由於名譽較低,因此很難直接發帖作爲回答,但它應該是評論。

您的選擇沒有name屬性;它永遠不會作爲POST的一部分發送。給它一個名稱的屬性以及一個值:

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

可以使用MultiDict.getlist()檢索列表中的所有值:

request.form.getlist('layer')