我正在尝试使用web2py应用程序here,我收到错误消息。我在StackOverFlow和其他网络资源上尝试了多种解决方案,但无法使其发挥作用。我知道这是列表的问题,但对正确的方向的一点点将是很大的帮助。但是我尝试了一些解决方案,没有任何方法可以帮助我。
CODE:
def __edit_survey():
surveys=db(db.survey.code_edit==request.args[0]).select()
if not surveys:
session.flash='survey not found'
redirect(URL('index'))
return surveys[0]
def __take_survey():
surveys=db(db.survey.code_take==request.args[0]).select()
if not surveys:
session.flash='survey not found'
redirect(URL('index'))
return surveys[0]
错误:
Error ticket for "SurveyAppFlourish"
Ticket ID
127.0.0.1.2017-09-23.04-40-15.58fadb34-fbc0-4064-b9e1-ecc67362eafa
<type 'exceptions.IndexError'> list index out of range
Version
web2py™
Version 2.15.3-stable+timestamp.2017.08.07.12.51.45
Python
Python 2.7.12: C:\Python27\python.exe (prefix: C:\Python27)
Traceback
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Traceback (most recent call last):
File "C:\Users\Mudassar\PycharmProjects\web2pydemoproject\web2py\gluon\restricted.py", line 219, in restricted
exec(ccode, environment)
File "C:/Users/Mudassar/PycharmProjects/web2pydemoproject/web2py/applications/SurveyAppFlourish/controllers/survey.py", line 299, in <module>
File "C:\Users\Mudassar\PycharmProjects\web2pydemoproject\web2py\gluon\globals.py", line 409, in <lambda>
self._caller = lambda f: f()
File "C:/Users/Mudassar/PycharmProjects/web2pydemoproject/web2py/applications/SurveyAppFlourish/controllers/survey.py", line 88, in take
survey=__take_survey()
File "C:/Users/Mudassar/PycharmProjects/web2pydemoproject/web2py/applications/SurveyAppFlourish/controllers/survey.py", line 45, in __take_survey
surveys=db(db.survey.code_take==request.args[0]).select()
IndexError: list index out of range
错误发生在surveys=db(db.survey.code_edit==request.args[0]).select()
答案 0 :(得分:0)
在表单/app/controller/function/a/b/c
的网址中,function
之后的路径部分(即a
,b
和c
在这种情况下)被存储为request.args
中的列表。如果request.args[0]
正在抛出IndexError
,则表示请求的网址中没有网址args。
request.args
不是标准的Python列表,而是类gluon.storage.List
的对象。它是可调用的并且需要一些额外的参数来处理特殊情况。例如,您可以在没有URL args时指定默认值:
db(db.survey.code_edit == request.args(0, default=my_default)).select()
如果您只想在项目不存在时想要值None
,则不必明确指定默认值:
db(db.survey.code_edit == request.args(0)).select()
在上方,request.args(0)
将返回None
而非提出IndexError
。
作为替代方案,您可以在缺少项目时指定重定向网址:
db(db.survey.code_edit == request.args(0, otherwise=URL('index')).select()
如果没有request.args[0]
,则上述内容将重定向到index
网址。 otherwise
参数也可以是一个函数(例如,您可以使用它来设置response.flash
,然后执行重定向。)