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
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.