2017-06-19 261 views
0

我正在構建基於Python/Flask的Web應用程序。 python腳本產生一個單詞詞典及其相應的權重。我有一個JavaScript文件(我們稱之爲custom.js),我從output.html中調用它。這種JavaScript的工作方式是它需要這本詞典,然後使用d3.v3.min.jsd3.layout.cloud.js創建一個wordcloud。當字典被硬編碼到custom.js時,輸出文件顯示wordcloud。但是,字典值將根據python腳本中的其他參數而改變。因此,我想將這本詞典從Python傳遞到custom.js。我不知道該怎麼做。將參數從Python Flask應用程序通過HTML傳遞給Javascript文件

我知道的參數可以通過使用{{ params |safe }}爲HTML,但我試圖找出如何做到這一點,使custom.js將接收的參數(詞和權重的字典,在這種情況下)和字雲可以動態呈現。

預先感謝您!

+0

基於努爾然建議的鏈路上@,我修改了app.py代碼爲:'''的tps = [{ '文本': '甚至', '尺寸':180},{「文本':'很棒','尺碼':49} ] return render_template('results3.html',tps = tps)'''。作爲函數myFunc(tps){return tps;} d3.layout.cloud()。size([300,300]) .words(tps) .rotate (0).....'''我的HTML腳本部分爲''' '''。我究竟做錯了什麼? – bluetooth

+0

tps應該是字典{...},而不是列表[...]。在'{{tps |安全}}'將'safe'改爲'tojson'。 – Nurjan

回答

0

如果我正確地理解了你,你需要在燒瓶後端創建一個視圖函數(一個路由),並且url這樣的/get_dictionary。該功能可以是這樣的:

從瓶進口的要求,jsonify ...

@app.route('/get_dictionary'): 
def get_dictionary(): 
    ... 
    your_dictionary = [] 
    # Fill in your_dictionary with data 
    ... 
    render_template('your_template.html', your_dictionary=your_dictionary) 

編輯:

您可以從燒瓶數據傳遞到HTML模板使用標準的腳本部分Jinja2的符號:

<html> 
<head> 
    <script> 
    your_dictionary = {{ your_dictionary | tojson }} 
    <!-- Do what you need with your_dictionary --> 
    </script> 
    ... 
</head> 
... 
+0

我可能沒有正確解釋問題。我想要做的是將一個變量傳遞給一個JavaScript而不是一個HTML文檔。我們可以通過在HTML中放置'{{foo | safe}}'將變量'foo'傳遞給HTML,但是如果我想傳遞變量'foo'的javascript是我''。在這裏,我想將一個變量傳遞給'medley.js'。 – bluetooth

+0

@bluetooth我編輯了答案。您可以像往常一樣使用標準jinja2表示法將數據發送到html模板的內部腳本標記。如果這不能解決你的問題,那麼看看這個帖子可能已經回答了你的問題。 https://stackoverflow.com/questions/37259740/passing-variables-from-flask-to-javascript – Nurjan

+0

我試過你的建議,但沒有奏效。所以,我在你提供的鏈接中嘗試了這個建議,但那也沒有奏效。我只是給我的問題添加了一條評論,請解釋一下。如果你能看一下,我將不勝感激。謝謝 ! – bluetooth

相關問題