2017-10-14 38 views
0

如何獲取在窗體上提交的用戶輸入以顯示在固定的URL上?Flask(Python):將輸入作爲參數傳遞給具有固定URL的不同路徑的函數

@app.route('/', methods=['GET','POST']) 
def main(): 
    if request.method == 'POST': 
     msg = request.form['message'] 
     return redirect(url_for('display_msg', msg=msg)) 
    else: 
     return form 


@app.route('/msg') 
def display_msg(msg): 
    return msg 

當提交表單,我收到以下錯誤:

類型錯誤:display_msg()失蹤1個人需要的位置參數:「味精」

此代碼實際工作正常,如果我初始化msg爲一個全局變量,然後在main的頂部做global msg,但它不允許我將msg作爲參數傳遞給display_msg

這將工作的另一種方法是,如果我將@app.route('/msg')更改爲@app.route('/<string:msg>'),但這會將URL更改爲用戶在窗體上提交的任何不是我想要的內容。我希望URL得到修復。

回答

1

由於從MSG的數據已經存儲在請求對象,而不是將它作爲一個參數來display_msg,它可以如下獲得:

@app.route('/msg') 
def display_msg(): 
    return request.args.get('msg') 

的類型錯誤發生,因爲的關鍵字參數url_for傳遞給請求對象,而不是display_msg的參數。

0

你需要指定味精參數:

@app.route('/msg/<msg>') 
def display_msg(msg): 
    return msg 
+0

我希望display_msg的URL是相同的,無論用戶在表單上輸入什麼內容。請閱讀我的文章的最後幾行。 – moravec

-1

您可以使用全局變量來存儲信息並返回到一個固定的URL。

編輯:我更新了display_msg()以使用默認參數。

global_msg = "" 
@app.route('/', methods=['GET','POST']) 
def main(): 
    global global_msg 
    if request.method == 'POST': 
     global_msg = request.form['message'] 
     return redirect(url_for('display_msg')) 
    else: 
     return form 


@app.route('/msg') 
def display_msg(msg = global_msg): 
    return msg 

希望這對你有幫助。

+0

是的,我已經知道了。我問爲什麼當我作爲參數在本地傳遞它時不起作用。 – moravec

+0

你能解釋爲什麼你試圖擺脫全球成員方法嗎?我修改了答案,通過使用默認參數來接受對'display_msg()'的直接調用。 – nipunasudha

+0

好吧,因爲在可能的情況下避免使用全局變量通常是一種很好的做法。請參閱下面的答案。 – moravec

相關問題