我需要在我的app.py
中的多個@ app.route中訪問我的WTForm中的信息,以便我可以爲我的應用發佈數據可視化。目前,我有一個@app.route(/home/)
頁面,用戶在此頁面輸入的文本由WTForm處理,然後傳遞到@app.route(/results/
),我的代碼在其中進行一些數據分析,然後1)顯示一些結果並2)將一些其他信息保存到JSON ,它將用於D3自己的@app.route(/visualization/)
。由於Javascript的複雜性,我想在自己的iframe
中顯示我的D3可視化。現在我可以加載/home/
頁面,輸入文本並點擊「提交」,然後將我重定向到/results/
,除iframe
之外的所有內容都正確打印。問題是:我無法獲得@app.route(/visualization/)
從我的WTForm中獲取信息(與results
能夠使用的方式相同),以便圖像可以加載正確的JSON文件。我可以爲多個@ app.route使用一個WTForm嗎?
下面是我的一些代碼,以更好地說明問題。
app.py
:
# Home
@app.route("/home/", methods=["GET", "POST"])
def gohome():
error = None
with open('somedata.pickle', 'rb')as f:
some_content = pickle.load(f)
try:
if request.method == "POST":
attempted_pmid = request.form['pmid']
except Exception as e:
#flash(e)
return render_template("dashboard.html", error=error)
return render_template("dashboard.html", some_content=some_content)
# My WTForm for handling user-entered pmids
class pmidForm(Form):
pmid = TextField('PubmedID')
# Results
@app.route("/results/", methods=["GET", "POST"])
def trying():
form = pmidForm(secret_key='potato')
try:
if request.method == 'POST':
entry = form.pmid.data #THIS IS THE USER INPUT FROM THE FORM #referencing 'class pmidForm'
pmid_list = multiple_pmid_input(entry) #list for handling multiple pmids
print(pmid_list)
for user_input in pmid_list:
print(str(user_input))
user_input = str(user_input)
# DO STUFF HERE #
# SAVE A JSON FILE TO A FOLDER #
return render_template('results.html')
except Exception as e:
return(str(e))
# Visualization
@app.route('/visualization/', methods=["GET", "POST"]) #for iframe
def visualization():
#need to get last user_input
form = pmidForm(secret_key='potato')
try:
if request.method == 'POST':
entry = form.pmid.data
pmid_list = multiple_pmid_input(entry)
for user_input in pmid_list:
print("This is the user input on /visualization/")
print(str(user_input))
user_input = str(user_input)
#Load
if user_input == pmid_list[-1]:
load_path = '/the/path/'+str(user_input)+'/'
completeName = os.path.join(load_path, ((str(user_input))+'.json'))
print(completeName)
with open(completeName, 'w') as load_data:
jsonDict = json.load(load_data)
print(jsonDict)
return render_template('visualization.html', jsonDict=jsonDict)
except Exception as e:
return(str(e))
所以我有現在,home
和results
與現有WTForm我有做工精細在一起。我會盡一切努力。但在results.html
我需要一個iframe
像這樣加載visualization.html
:
線在results.html
:
<iframe id="vis1" src="https://www.website.com/visualization/" width="1000" height="1000"></iframe>
有了這個配置,如果我跑我的app.py
,一切都顯示正常人一樣,除了它顯示iframe
:
分配前的局部變量'jsonDict'
在這裏,我認爲這是參考我visualization.html
它有神社代碼:
var myjson = {{ jsonDict|tojson }};
如此明顯的@app.route(/visualization/)
不會從WTForm獲取信息,因爲它應該。我如何獲得第二個@app.route
來識別WTForm中的內容,例如它如何與results
一起工作?
此外,這可能看起來很詭異,但我有很好的理由讓我的D3在iframe
。這是因爲我需要能夠切換多個html,如/visualization
/,每個html都有複雜的Javascript,彼此衝突。我能做的最好的事情是將他們全部隔離在iframe
的位置。