Отри сохранить страницу статических результатов
Я использую OTree для запуска ряда различных приложений / игр / экспериментов за сеанс. В настоящее время результаты каждого приложения отображаются в приложении как последняя страница. Но я хочу не показывать результаты до тех пор, пока все приложения не будут запущены, в приложении с конечными результатами.
Вместо того, чтобы создавать кучу новых переменных участников для хранения всех результатов и писать новый код для их отображения, я надеялся, что в каждом приложении есть какой-то способ, которым я могу сохранить results_page.html как статическую HTML-страницу (со всеми переменными, отображаемыми с их текущими значениями, а не {{variable}}), которые я мог загрузить позже вне приложения в конце в приложении с конечными результатами.
За последние несколько месяцев я довольно много узнал о кодировании в Otree и могу понять основы Python, но Django все еще сбивает меня с толку (я старая школа).
Я нашел код для чтения на html-странице и сохранил его как строку, но, похоже, не смог дать значение переменных просто {{variable}}. Я думаю, что я видел что-то про Django модуль Пекарня?
Я надеялся, что это может быть что-то легко (кто не делает).
Может кто-то указать мне верное направление?
Blackers
1 ответ
Чтобы быть искренним, я считаю этот статический подход для извлечения данных игроков из других приложений очень неэффективным.
Что я хотел бы предложить, если вы не хотите писать кучу 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
когда еще нет выигрыша, но это только для иллюстрации идеи