0

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

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

在过去的几个月里,我在 Otree 中学习了一些关于编码的知识,并且可以理解基本的 Python,但是 Django 仍然让我感到困惑(我是老派)。

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

我希望这可能很容易(谁没有)。

谁能指出我正确的方向?

黑帮

4

1 回答 1

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没有回报的时候计算它,但这只是为了说明这个想法

于 2018-05-22T23:00:32.307 回答