#1 by Dave
Hello, I have added an admin report to my app. I have been able to use vars_for_admin_report to pass values to the admin report page using the template and have those values listed. I am trying to display a histogram of those values using HighCharts. I have been able to get the histogram to display using hard coded data. But I have not been able figure out how to pass the values to the javascript for that page. Since the admin report page is not part of my app, I am not sure how to do the equivalent of: class Page_Name(page): @staticmethod def js_vars(subsession: Subsession): return dict(value=subsession.value) Any help is greatly appreciated. Thanks.
#2
by
BonnEconLab
JavaScript can access the values generate by `vars_for_admin_report`. Here is an example, using a bar chart created manually, extending the example from https://otree.readthedocs.io/en/latest/admin.html#customizing-the-admin-interface-admin-reports. ###################### ## In __init__.py ## ###################### def vars_for_admin_report(subsession): payoffs = [[p.id_in_subsession, p.payoff] for p in subsession.get_players()] return dict(payoffs=payoffs) ######################### ## admin_report.html ## ######################### <h4>Payoffs in round {{ subsession.round_number }}</h4> <div style="height: 120px; display: flex;"> {{ for payoff in payoffs }} <div class="bg-primary border-1 border-bottom border-secondary" id="bar_{{ payoff.0 }}" style="height: 1px; width: 80px; display: inline-block; margin-top: auto; margin-right: 5px;"> </div> {{ endfor }} </div> <div style="vertical-align: top; display: flex;"> {{ for payoff in payoffs }} <div class="text-secondary" style="height: 10px; width: 80px; display: inline-block; text-align: center; margin-right: 5px;"> Player {{ payoff.0 }} </div> {{ endfor }} </div> <script> var payoffs = {{ payoffs|json }}; for (var i = 0; i < payoffs.length; i++) { document.getElementById('bar_' + payoffs[i][0]).style.height = payoffs[i][1] + 'px'; } </script>
#3 by Dave
Awesome. Thank you so much! That first line in the script is what I was missing.