Strumenti Utente

Strumenti Sito


otree_mytips

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
otree_mytips [2020/09/10 11:48]
pietro otree strings
otree_mytips [2020/09/12 09:49] (versione attuale)
pietro randomize order
Linea 1: Linea 1:
 ====== My tips with oTree ====== ====== My tips with oTree ======
  
-==== Override oTree localization ====+===== Override oTree localization =====
  
 **Problem:** I have a session in few days, and my language's localization is not complete. I have already [[https://github.com/oTree-org/otree-core/pull/540|contributed]] new strings, but too late for them being included in time in a new release. **Problem:** I have a session in few days, and my language's localization is not complete. I have already [[https://github.com/oTree-org/otree-core/pull/540|contributed]] new strings, but too late for them being included in time in a new release.
Linea 14: Linea 14:
  
 That's it! The strings will be shown next time you start oTree - including in Heroku (remember to ''git add'' and ''git commit'' the ''django.mo'' file). That's it! The strings will be shown next time you start oTree - including in Heroku (remember to ''git add'' and ''git commit'' the ''django.mo'' file).
 +
 +===== Using labels in rooms =====
 +
 +When a room is set up for participant labels, I should _not_ distribute the auto-generated links available under ''Participant-specific URLs'' in the session page. These will result in ''player.participant.label'' being ''None'', and in new participants using the provided labels to get an error message when the room is full.
 +
 +===== Including a figure made with matplotlib =====
 +
 +<code>
 +from matplotlib import pyplot as plt
 +from io import BytesIO
 +from base64 import b64encode
 +import urllib
 +
 +class MyPage(Page):
 +    def create_figure(self):
 +        plt.figure(figsize=(4, 3))
 +        plt.plot(range(3), range(3), color='blue', marker='d', markersize=10)
 +
 +        fig = plt.gcf()
 +        buf = BytesIO()        
 +        fig.savefig(buf, format='png', bbox_inches='tight')
 +        buf.seek(0)
 +
 +        string = b64encode(buf.read())
 +
 +        return urllib.parse.quote(string)
 +
 +    def vars_for_template(self):
 +        return {'my_img' : self.create_figure()}
 +</code>
 +
 +... and inside the template:
 +
 +<code>
 +<img width="100%" src="data:image/png;base64,{{ my_img }}">
 +</code>
 +
 +===== Randomize order of two activities inside a same page =====
 +
 +Create a Boolean variable ''swap'' that determines whether to reorder, pass it with ''vars_for_template''. Then:
 +
 +''mypage_base.html'':
 +
 +<code>
 +[...]
 +
 +{% block content %}
 +{% if swap %}
 +    {% block a_1 %}{% endblock %}
 +    {% block b_1 %}{% endblock %}
 +{% else %}
 +    {% block a_2 %}{% endblock %}
 +    {% block b_2 %}{% endblock %}
 +{% endif %}
 +</code>
 +
 +''mypage.html'':
 +
 +<code>
 +{% extends "appname/mypage_base.html" %}
 +{% load otree %}
 +
 +
 +{% block a_1 %}{% block a_2 %}
 +This is block a.
 +{% endblock %}{% endblock %}
 +
 +{% block b_1 %}{% block b_2 %}
 +This is block b.
 +{% endblock %}{% endblock %}
 +</code>
otree_mytips.1599731321.txt.gz · Ultima modifica: 2020/09/10 11:48 da pietro