我正在使用OTree在一个会话中运行许多不同的应用程序/游戏/实验。目前,每个应用程序的结果都作为最后一页显示在应用程序中。但我希望在所有应用程序运行后,在最终结果应用程序中显示任何结果。
而不是创建一个新的参与者变量堆来存储所有结果并编写新的代码来显示它们,我希望在每个应用程序中,我可以将变量保存为静态html页面(所有变量都以当前值显示,而不是{{ results_page.html }}),以便稍后在最终结果应用程序中加载到应用程序之外。
在过去的几个月里,我在Otree中学到了不少关于编码的知识,可以理解基本的Python,但Django仍然让我感到困惑(我是个老派)。
我已经找到了读取html页面并将其保存为字符串的代码,但似乎无法仅给出变量的值{{variable}}。我想我看到了一些关于Django模块面包房的东西?
我希望这可能是简单的东西(谁不是)。
有谁能给我指个方向吗?
黑人党
发布于 2018-05-23 07:00:32
坦率地说,我发现这种从其他应用程序中检索玩家数据的静态方法效率非常低。
如果你不想写一大堆participant.vars,我建议你直接获取数据。
如果您的app_sequence中有一组应用程序,您可以使用participant对象和相关对象管理器随时获取此数据。
假设你有['app1', 'app2', 'app3', 'conclusion']应用程序。
然后,对于任何参与者,当您在conclusion中时,您可以通过以下方式从app2获取所有玩家:
app2players = self.participant.app2_player.all()然后,您可以汇总这组玩家的任何字段,或者其他任何字段。例如,此示例将按顺序显示app中的汇总收益:
def creating_session(self):
appseqs = [i.lower() for i in self.session.config['app_sequence']]
for p in self.session.get_participants():
for i in appseqs:
player_app_name = '{}_player'.format(i)
payoff = sum([j.payoff for j in getattr(p,player_app_name ).all()])
print('Payoff in app {} for the participant {}:: {}'.format(i, p.code, payoff))输出将为:
Payoff in app trial_ch_uh for the participant ujngvqql:: 0 points
Payoff in app treatment_ch_uh for the participant ujngvqql:: 0 points
Payoff in app treatment_repeated_ch_uh for the participant ujngvqql:: 0 points这是一个愚蠢的例子,因为我在还没有回报的情况下用creating_session计算它,但这只是为了说明这个想法
https://stackoverflow.com/questions/50462328
复制相似问题