Open Collective
Open Collective
Loading
oTree Snippets
Published on August 25, 2022 by Casey Moser


Links


Here are recipes for common tasks on oTree

Apps

  • appcopy1
  • appcopy2
  • are_you_sure 'Are you sure?' popup based on the user's input
  • audio_alert Audio alert (speak some text to get the participant's attention, after a wait page)
  • back_button Back button for multiple instructions pages
  • balance_treatments_for_dropouts
  • bmi_calculator Basic single-player game (BMI calculator)
  • chat_from_scratch Of course oTree has a readymade chat widget described here: https://otree.readthedocs.io/en/late...
  • chat_with_experimenter Chat with experimenter, using Papercups
  • complex_form_layout
  • comprehension_test Comprehension test. If the user fails too many times, they exit.
  • comprehension_test_simple Simple version of comprehension test
  • configurable_players_per_group Configurable players per group. See here: https://otree.readthedocs.io/en/latest/treatments.html#...
  • constant_sum
  • count_button_clicks Count button clicks
  • css Using CSS to style timer and chat box.
  • custom_export_groups custom_export: 1 row for each group
  • detect_mobile Detect and block mobile browsers
  • dropout_detection Dropout detection (if user does not submit page in time)
  • dropout_end_game Dropout detection for multiplayer game (end the game)
  • experimenter_input Experimenter input during the experiment, e.g. entering the result of a random draw. If you want...
  • factorial_treatments Randomize multiple factors in a balanced way
  • gbat_fallback_smaller_group_part0
  • gbat_fallback_smaller_group_part1 group_by_arrival_time: fall back to a smaller group if not enough people show up
  • gbat_fallback_solo_task_part0
  • gbat_fallback_solo_task_part1 group_by_arrival_time timeout (continue with solo task)
  • gbat_fallback_solo_task_part2
  • gbat_keep_same_groups_part0
  • gbat_keep_same_groups_part1
  • gbat_keep_same_groups_part2 Preserve same groups as a previous app that used group_by_arrival time.
  • gbat_new_partners group by arrival time, but in each round assign to a new partner.
  • gbat_treatments Conventionally, group-level treatments are assigned in creating_session: for g in subsession.get...
  • gbat_treatments_complex Similar to the basic gbat_treatments app, except: - Treatments are balanced rather than indepen...
  • getattr_setattr Using getattr() and setattr() to access numbered fields, e.g. player.num1, player.num2, ..., pla...
  • groups_csv Reads groups from a CSV file. Inside this app, you will find a groups6.csv, which defines the gro...
  • history_table History table
  • image_choices Images in radio button choices
  • input_calculation
  • live_volunteer Live volunteer's dilemma (first player to click moves everyone forward).
  • longitudinal Longitudinal study (2-part study taking place across days/weeks) Another way to do longitudinal ...
  • min_time_on_page Minimum time on a page
  • multi_language How to translate an app to multiple languages (e.g. English and German). There are 2 ways to def...
  • multi_page_timeout Timeout spanning multiple pages
  • multi_select Question that lets you select multiple options (multi-select, multiple choice / multiple answer)
  • multi_select_complex Question that lets you select multiple options (multi-select, multiple choice / multiple answer) ...
  • other_player_previous_rounds Showing other players' decisions from previous rounds
  • pass_data_between_apps_part1
  • pass_data_between_apps_part2
  • pay_random_app1
  • pay_random_app2 """ class C(BaseConstants): NAME_IN_URL = 'pay_random_app2' PLAYERS_PER_GROUP = None ...
  • pay_random_app3 App where we choose the app to be paid
  • pay_random_round Select a random round for payment
  • persist_raw Sliders and checkboxes that don't get wiped out on form reload. Also works for text/number inputs...
  • placeholder
  • practice_rounds Practice rounds
  • progress_bar All you need is a participant field called 'progress' then keep adding 1 to it.
  • questions_from_csv_complex Read quiz questions from a CSV (complex version). See also the 'simple' version. It would be much...
  • questions_from_csv_simple Read quiz questions from a CSV (simple version). See also the 'complex' version of this app.
  • question_with_other_option Menu with an 'other' option that lets you type in a valueInput manually
  • quiz_with_explanation Quiz with explanation. Re-display the previous page's form as read-only, with answers/explanation.
  • radio Radio buttons in various layouts, looping over radio choices
  • radio_switching_point Table where each row has a left/right choice, like the strategy method. This app enforces a singl...
  • random_num_rounds
  • random_num_rounds_multiplayer Random number of rounds for multiplayer (random stopping rule)
  • random_num_rounds_multiplayer_end
  • random_question_order
  • random_task_order For each participant, randomize the order of tasks A, B, and C. Task B has 2 pages, which are alw...
  • rank_players Rank players
  • rank_topN Ranking your top N choices from a list of options.
  • rank_widget "Widget to rank/reorder items". See http://sortablejs.github.io/Sortable/ for more examples.
  • redirect_to_other_website
  • sequential Sequential game (asymmetric)
  • sequential_symmetric Sequential / cascade game (symmetric). Also see "intergenerational" featured app.
  • show_other_players_payoffs
  • slider_graphic An image that changes when you move a slider. If your image is a some kind of chart, it's better ...
  • slider_live_label Slider with live updating label
  • supergames Supergames consisting of multiple rounds each
  • timer_custom Timer: replacing the default timer with your own
  • treatments_from_spreadsheet Reading treatment parameters from a CSV spreadsheet
  • wait_for_specific_people Wait only for specific people
  • wait_page_timeout Timeout on a WaitPage (exit the experiment)