from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import json class Q1(Page): form_model = 'player' form_fields = ['choice1'] class ResultsWaitPage(WaitPage): def after_all_players_arrive(self): pass class Q2(Page): form_model = 'player' form_fields = ['choice2'] class Q3(Page): form_model = 'player' form_fields = ['choice3'] class Q4(Page): form_model = 'player' form_fields = ['choice4'] class Q5(Page): form_model = 'player' form_fields = ['choice_5'] class Q6(Page): form_model = 'player' form_fields = ['choice_6'] initial_page_sequence = [ Q1, Q2, Q3, Q4, Q5, Q6 ] page_sequence = [ ] class MyPage(Page): def inner_dispatch(self): page_seq = int(self.__class__.__name__.split('_')[1]) page_to_show = json.loads(self.player.page_sequence)[page_seq] self._is_frozen = False self.__class__ = globals()[page_to_show] return super(globals()[page_to_show], self).inner_dispatch() for i, _ in enumerate(initial_page_sequence): NewClassName = "Page_{}".format(i) A = type(NewClassName, (MyPage,), {}) locals()[NewClassName] = A page_sequence.append(locals()[NewClassName])