Páginas

Cada página que ven tus participantes está definida por un Page.

Tu page_sequence da el orden de las páginas.

Si tu juego tiene múltiples rondas, esta secuencia se repetirá (ver Rondas).

Un Page puede tener cualquiera de los siguientes métodos y atributos.

is_displayed()

Puedes definir esta función para que devuelva True si la página debe ser mostrada, y False si la página debe ser omitida. Si se omite, la página se mostrará.

Por ejemplo, para mostrar la página solo a P2 en cada grupo:

@staticmethod
def is_displayed(player):
    return player.id_in_group == 2

O solo muestra la página en la ronda 1:

@staticmethod
def is_displayed(player):
    return player.round_number == 1

Si necesitas repetir la misma regla para muchas páginas, utiliza app_after_this_page.

vars_for_template()

Utiliza esto para pasar variables al template. Ejemplo:

@staticmethod
def vars_for_template(player):
    a = player.num_apples * 10
    return dict(
        a=a,
        b=1 + 1,
    )

Entonces en el template puedes acceder a a y b así:

Variables {{ a }} and {{ b }} ...

oTree pasa automáticamente los siguientes objetos a la plantilla: player, group, subsession, participant, session y C. Puedes acceder a ellos en la plantilla así: {{ C.BLAH }} o {{ player.blah }}.

Si el usuario actualiza la página, vars_for_template se vuelve a ejecutar.

before_next_page()

Aquí defines cualquier código que debe ejecutarse después de la validación del formulario, antes de que el jugador proceda a la siguiente página.

Si la página se omite con is_displayed, entonces before_next_page también se omitirá.

Ejemplo:

@staticmethod
def before_next_page(player, timeout_happened):
    player.tripled_apples = player.num_apples * 3

timeout_seconds

Ver Timeouts

Páginas de espera

Ver Páginas de espera

Aleatorizando la secuencia de páginas

Puedes aleatorizar el orden de las páginas utilizando rondas. Un ejemplo está aquí.

app_after_this_page

Para saltar aplicaciones enteras, puedes definir app_after_this_page. Por ejemplo, para saltar a la siguiente aplicación, harías lo siguiente:

@staticmethod
def app_after_this_page(player, upcoming_apps):
    if player.whatever:
        return upcoming_apps[0]

upcoming_apps es el resto de la app_sequence (una lista de cadenas). Por lo tanto, para saltar a la última aplicación, devolverías upcoming_apps[-1]. O podrías simplemente devolver una cadena codificada (siempre que esa cadena esté en upcoming_apps):

@staticmethod
def app_after_this_page(player, upcoming_apps):
    print('upcoming_apps is', upcoming_apps)
    if player.whatever:
        return "public_goods"

Si esta función no devuelve nada, el jugador procede a la siguiente página como de costumbre.

Back button

Nota

To use this, you must install oTree 6.0

You can now allow participants to click a «Back» button to go to the previous page.

On the Page class, add this attribute:

class MyPage(Page):
    allow_back_button = True

Then in the template, use {{ back_button }} just as you would use {{ next_button }}.

Back button notes

  • {{ back_button }} is not the same as the browser’s back button. As was the case previously, the user should not click the browser’s back button.

  • If you use {{ back_button }} on a page with a form, it’s recommended to also use preserve_unsubmitted_inputs = True so that the form will not be lost if the user clicks «back».

Advanced usage

If you don’t want to use the built-in {{ back_button }}, you can call the back_button() function using JavaScript, e.g. <button type="button" onclick="back_button(1)">...</button>.

Restrictions of back button

  • Cannot go back through a wait page

  • Cannot go to a previous app

(These restrictions may be relaxed in future versions of oTree.)