2016-05-02 100 views
1

目前,我的網站上有兩個下拉框,它們的值在表單提交時轉換爲兩個URL參數「myState」和「myShelter」。例如:如何使用Flask/Python 3處理URL中缺少的參數

https://www.atweather.org/forecast?myState=CT&myShelter=181

我現在添加第三個框,就會出現所謂的「myTrail」第三相應的參數。我的問題是:我怎麼能這樣做,如果有人直接提交一個只有兩個參數的URL,瀏覽器不會錯誤地發出錯誤的請求?我希望用戶能夠看到頁面,就像「myState」和「myShelter」被選中一樣,但「myTrail」只是未選中。

我試着尋找herehere,但我不認爲這些與我所問的情況完全相同。我在Python 3下使用Flask,目前處理這樣的路由,如下所示:

@app.route('/forecast', methods = ['GET']) 
def forecast(loc_state = None, loc_id = None): 

    """ 
    Handles rendering of page after a location has been selected 
    """ 

    loc_state = request.args['myState'] 
    loc_id = int(request.args['myShelter']) 

    ...and a bunch of other logic for rendering the page... 

在此先感謝您的任何見解!

+1

我不明白我的問題是如何重複提到的問題。我可以看到在哪裏使用'dict'方法'get'可能對我有用,但我的問題的上下文根本不存在於該線程中。 –

+0

'request.args'是一個字典子類。就像任何其他詞典一樣,如果你想嘗試在不產生錯誤的情況下獲得值,可以使用'get'。您使用Flask的事實並非真正相關,下面的答案與其他答案相同。 – davidism

+0

另請注意,將這些參數添加到視圖函數並不重要,參數是從捕獲的url值填充的,而不是查詢參數。 – davidism

回答

1

request.args.get()方法允許獲取參數,如果它存在。

# return None if the argument doesn't exist 
trail = request.args.get('myTrail') 

# return 'x' if the argument doesn't exist 
trail = request.args.get('myTrail', 'x') 

之後,只需處理值返回您想要的方式。