我有以下数据库表:
db.define_table('game', Field('video', 'upload'),
Field('pics', 'upload'),
Field('answer'))
字段pics
和字段answers
各有6条记录。 video
字段只有1条记录。我必须显示pics
条记录以及来自answer
的6条记录,然后用户必须选择正确的answer
记录以匹配显示的pics
记录。
Controller
:
def test():
rows = db().select(db.game.ALL, limitby=(0, 6), orderby='<random>')
pic_row = rows[random.randint(0,4)]
session.pic_id = pic_row.id
return dict(rows=rows, pic_row=pic_row)
我在View
test.html
中有此内容:
<h1>{{=pic_row.pics}}</h1>
{{for row in rows:}}
<h4>{{=B(LI(A(row.answer, _href=URL('show_test', args=row.id))))}}</h4>
{{pass}}
每次点击answer
后,用户都会被show_test.html
发送给show_test.html
,用户将再次回到test.html
。我希望从pics
多次显示新记录(图像)5次,但random
将不起作用,因为它可能会重复同一记录多次。如何在每次访问页面时显示来自pics
一条记录的6条记录,而不重复任何记录?另一个相关问题是,我希望仅在用户首次访问video
时显示test.html
。
我想学习如何做到这一点,我感谢任何帮助。
答案 0 :(得分:0)
def test():
if not session.pic_id:
session.pic_id = []
rows = db(~db.game.id.belongs(session.pic_id)).select(db.game.ALL, limitby=(0, 6), orderby='<random>')
pic_row = rows.first()
session.pic_id.append(pic_row.id)
if not session.already_visited:
#Do something to show your video....
session.already_visited = True # Change it to true so it doesn't run this piece of code again
return dict(rows=rows, pic_row=pic_row)
该解决方案可以保存会话中所有以前展出的图片,并且只会随机检索一次图片。我不确定这是不是你真正想做的事情,因为在6张照片之后,没有其他任何东西可以显示给用户。