Pages

Pages

実験参加者が見る各ページは pages.py の中にあるPageクラスで定義されます.

2018年1月以前,pages.pyviews.pyと呼ばれていました.詳細はoTree2.0のページをご確認ください.

pages.pyには,ページの順番を決めるpage_sequence変数があります.例えば,

page_sequence = [Start, Pffer, Accept, Results]

もし複数回繰り返しゲームを行うならば,このページ遷移は繰り返されます.詳細はRoundsをご確認ください.

is_displayed()

この関数を定義して,ページを表示する必要があるならばTrueに,そしてFalseにすればページを飛ばすことができます.省略すると,ページは表示されます.

例えば,ページを各グループのプレイヤー2のみに表示するのであれば,以下のようにします.

class Page1(Page):
    def is_displayed(self):
        return self.player.id_in_group == 2

もしくは,第1ラウンドだけ表示するのであれば,以下のようにします.

class Page1(Page):
    def is_displayed(self):
        return self.round_number == 1

もし同じルールを複数ページに渡って繰り返す必要があるならば,[こちら](https://otree.readthedocs.io/en/latest/misc/tips_and_tricks.html#skip-many)を御覧ください.

id_displayer()に書いたコードはTrueFalseを返します.修正されたモデルフィールドのような副次的な効果は持つべきではありません.

vars_for_template()

テンプレートに変数を渡すために,この関数を使ってください.

class Page1(Page):
    def vars_for_template(self):
        return {'a': 1 + 1, 'b': self.player.foo * 10}

そうすれば,abには次のようにアクセスすることができます.

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

oTreeは自動的に以下のオブジェクトをテンプレートに渡しています:playergroupsubsessionparticipantsessionConstants.そして,テンプレートの中にあるそれらのオブジェクトに対して,以下のようにアクセスすることができます:{{ Constants.blah }},`{{ player.blah }}

もし複数のページにある同じ変数にデータを渡す必要があれば,[こちら](https://otree.readthedocs.io/en/latest/misc/tips_and_tricks.html#vars-for-many-templates)を御覧ください.

vars_for_templateにランダムな変数を作ってはいけません.なぜならば,もしユーザがページを新しくしてしまったら,vars_for_templateは再び実行されてしまい,ランダムな計算によって異なる値が返される可能性があります.そのかわり,creating_sessionbefore_next_page,もしくはafter_all_players_arriveなどを用いれば,ランダムな計算は一度行割れるだけになります.

before_next_page

続いて,プレイヤーが次のステージに進む前にフォームを検証するコードを定義します.

is_displayedを用いてページをスキップするのであれば,before_next_pageも同様にスキップされることになります.

例:

class Page1(Page):
    def before_next_page(self):
        self.player.tripled_payoff = self.player.bonus * 3

template_name

それぞれのファイルはtemplate/の中に同じ名前で保存されます.例えば,アプリがmy_app/page.pyに以下のように記述されたとします.

class Page1(Page):
    pass

その時は,my_app/templates/my_app/Page1.htmlにファイルを作る必要があります(my_appは繰り返されます.).HTMLテンプレートの書き方はTemplates(準備中)を見てください.

もしテンプレートがあなたのpageクラスとは異なった名前にする必要があるならば(例えば同じテンプレートを複数のページで用いる場合など)template_nameを設定する必要があります.例えば,以下の通りです.

class Page1(Page):
    template_name = 'app_name/MyView.html'

timeout_seconds, timeout_submission, etc...

Timeouts(準備中)をご確認ください.

Wait pages

Wait pages(準備中)をご確認ください

Randomizing page sequence

ページの順番をランダマイズすることができます.

※ちなみに,実際にゴトウもやってみました.無事に動きますし,これを使った実験をやってみようと思います.

Last updated