2016-05-02 60 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') 

之后,只需处理值返回您想要的方式。