Otree保存静态结果页面

时间:2018-05-22 07:42:57

标签: django otree

我正在使用OTree在会话中运行许多不同的应用/游戏/实验。 目前,每个应用程序的结果都显示在应用程序中作为最后一页。但是我希望在最终结果应用程序运行所有应用程序之前显示任何结果。

我不是必须创建一堆新的参与者变量来存储所有结果并编写新代码来显示它们,我希望在每个应用程序中有一些方法,我可以将results_page.html保存为静态html页面(所有变量显示在当前值不是{{variable}}),我可以在最终结果应用程序的最后加载到应用程序之外。

我在过去的几个月里对Otree的编码学到了很多东西,并且可以理解基本的Python,但是Django仍然让我感到困惑(我老了)。

我找到了在html页面中读取的代码并将其保存为字符串,但似乎无法仅将{{variable}}赋予变量的值。我想我看到了一些关于Django模块Bakery的事情?

我希望它可能很简单(谁不会)。

有人能指出我正确的方向吗?

Blackers

1 个答案:

答案 0 :(得分:0)

为了真诚,我发现这种静态的方法来检索玩家'来自其他应用程序的数据非常低效。

如果您不想写一堆participant.vars,我建议您直接获取数据。

如果app_sequence中有一组应用,您可以随时使用参与者对象和相关对象管理器获取此数据。

假设您有应用['app1', 'app2', 'app3', 'conclusion']

然后,当您在conclusion时,对于任何参与者,您可以通过以下方式获取所有玩家,例如app2

app2players = self.participant.app2_player.all()

然后你可以总结这组球员的任何领域,或者其他什么。 例如,这个将按顺序显示应用程序中的汇总支付:

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计算它,但这只是为了说明这个想法