在 web2py 中传递参数
Passing args in web2py
我的table是:
db.define_table('test', Field('name'), Field('pics', 'upload'))
操作:
def index():
rows = db().select(db.test.ALL, limitby=(0, 5), orderby='<random>')
return locals()
def other():
image = db.test(request.args(0,cast=int)) or redirect(URL('index'))
return locals()
索引视图:
{{import random
k=random.randint(0, 4)}}
<div>
<img width="500px"
src="{{=URL('download', args=rows[k].pics)}}" />
</div>
{{block left_sidebar}}
{{for row in rows:}}
{{=LI(A(row.name, _href=URL('other', args=row.id)))}}
{{pass}}
{{end}}
现在我显示了 5 个随机 name
和 1 个随机 pics
,其中 1 个 pics
与五个 name
之一具有相同的 ID。
我想要实现的是:如果单击与 pics
匹配的 name
我想在 other
中显示一些内容, 正确答案,如果其他 4 个 name
中的任何一个被点击,我想在 other
中显示其他内容, 错误答案。
在此方面我将不胜感激。
一种选择是将图片 ID 存储在会话中:
import random
def index():
rows = db().select(db.test.ALL, limitby=(0, 5), orderby='<random>')
pic_row = rows[random.randint(0, 4)]
session.pic_id = pic_row.id
return dict(rows=rows, pic_row=pic_row)
在视图中:
<div>
<img width="500px"
src="{{=URL('download', args=pic_row.pics)}}" />
</div>
最后,检查 other()
中的匹配项:
def other():
image = db.test(request.args(0,cast=int)) or redirect(URL('index'))
correct = image.id == session.pic_id
del session.pic_id # to prevent multiple attempts
return dict(image=image, correct=correct)
最好将图片 ID 存储在会话中,而不是将其嵌入页面中的 URL,这样用户就无法破解 URL 或找出正确答案检查 HTML。另外,请注意 session.pic_id
在单次检查后被删除,因此用户无法通过点击后退按钮进行多次猜测。
最后请注意,最好将尽可能多的逻辑保留在控制器中而不是视图中。因此,与其在视图中选择随机记录,不如在控制器中执行,然后将选定的记录发送到视图。
我的table是:
db.define_table('test', Field('name'), Field('pics', 'upload'))
操作:
def index():
rows = db().select(db.test.ALL, limitby=(0, 5), orderby='<random>')
return locals()
def other():
image = db.test(request.args(0,cast=int)) or redirect(URL('index'))
return locals()
索引视图:
{{import random
k=random.randint(0, 4)}}
<div>
<img width="500px"
src="{{=URL('download', args=rows[k].pics)}}" />
</div>
{{block left_sidebar}}
{{for row in rows:}}
{{=LI(A(row.name, _href=URL('other', args=row.id)))}}
{{pass}}
{{end}}
现在我显示了 5 个随机 name
和 1 个随机 pics
,其中 1 个 pics
与五个 name
之一具有相同的 ID。
我想要实现的是:如果单击与 pics
匹配的 name
我想在 other
中显示一些内容, 正确答案,如果其他 4 个 name
中的任何一个被点击,我想在 other
中显示其他内容, 错误答案。
在此方面我将不胜感激。
一种选择是将图片 ID 存储在会话中:
import random
def index():
rows = db().select(db.test.ALL, limitby=(0, 5), orderby='<random>')
pic_row = rows[random.randint(0, 4)]
session.pic_id = pic_row.id
return dict(rows=rows, pic_row=pic_row)
在视图中:
<div>
<img width="500px"
src="{{=URL('download', args=pic_row.pics)}}" />
</div>
最后,检查 other()
中的匹配项:
def other():
image = db.test(request.args(0,cast=int)) or redirect(URL('index'))
correct = image.id == session.pic_id
del session.pic_id # to prevent multiple attempts
return dict(image=image, correct=correct)
最好将图片 ID 存储在会话中,而不是将其嵌入页面中的 URL,这样用户就无法破解 URL 或找出正确答案检查 HTML。另外,请注意 session.pic_id
在单次检查后被删除,因此用户无法通过点击后退按钮进行多次猜测。
最后请注意,最好将尽可能多的逻辑保留在控制器中而不是视图中。因此,与其在视图中选择随机记录,不如在控制器中执行,然后将选定的记录发送到视图。