Pages
Pages
実験参加者が見る各ページは pages.py の中にあるPageクラスで定義されます.
2018年1月以前,
pages.pyはviews.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()に書いたコードはTrueかFalseを返します.修正されたモデルフィールドのような副次的な効果は持つべきではありません.
vars_for_template()
テンプレートに変数を渡すために,この関数を使ってください.
class Page1(Page):
def vars_for_template(self):
return {'a': 1 + 1, 'b': self.player.foo * 10}そうすれば,aやbには次のようにアクセスすることができます.
Variables {{ a }} and {{ b }} ...oTreeは自動的に以下のオブジェクトをテンプレートに渡しています:player,group,subsession,participant,session,Constants.そして,テンプレートの中にあるそれらのオブジェクトに対して,以下のようにアクセスすることができます:{{ 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_sessionやbefore_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
Was this helpful?