以前、Streamlitで複数ページのWebアプリを作るという記事を書きましたが、公式に複数ページアプリの対応がされたようなので試してみました。
これまではどうしていたか?
これまでもマルチページなアプリを作ることはできていましたが、裏技的な操作が必要でした。
MultiPageなアプリの作成
公式ドキュメントがあるので、そちらを確認してもらうのが早いと思います。
以下、私の理解を書き連ねておきます。
構成
複数ページのアプリを作成するためには、基本的にはページに対応するpythonファイルを置くだけです。
ホームに対応するpythonファイルと同じディレクトリに、 pages
ディレクトリを作成し、その下にpythonファイルを配置します。その他のディレクトリにファイルがあっても無視されるようです。
- src
|- home.py
|- pages/
|- page1.py
|- page2.py
これで、 home.py
をrootに、サイドバーに page1
、page2
が表示されるようになります。
↓こんな感じでページへのリンクがサイドバーに固定表示されます(下図オレンジで囲った部分)。
サイドバーに表示されるページ名のルール
表示ルール、表示順のルールについては公式ドキュメントが正確なのでこちらを見てもらえればと思います。
ファイル名の構成要素
以下のような構成でファイル名をブロックにわけて扱うようです。
{prefix}_{label}.py
- prefix: 数値
- separator:
_
,-
, (space) - label: prefixを除いた文字列
なお、これらの3つの要素全てを備えている必要はありません。
表示順序
- prefixがあれば、prefix(数値)でソート
- prefixがなければ、labelでソート
- label部分に数値があっても、prefixではないのでその値でソートはされない
表示ページ名
prefixは削除され、label部分がサイドバーに表示されます。
このとき、separatorはスペースに変換されます。
e.g. ファイル名 -> 表示名
[1_sample_1.py] -> [sample 1]
[sample_1.py] -> [sample 1]
先頭に数値を持ってきたい場合には、prefixを付けるか、_
などのseparatorを追加すれば良いです。
e.g. ファイル名 -> 表示名
[_1_sample.py] -> [1 sample]
[0_1_sample.py] -> [1 sample]
こんな感じ。
実際にやってみる
src
以下にstreamlitのファイルを置いています。
その他は環境構築関係なので、無視しちゃってOKです。
できたもの
できたものはこんな感じ(あまり意味はないけど、ベータ分布とディリクレ分布を可視化してみた)。
ファイルを置いておくだけでMulti Pageなアプリができました。