15
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Streamlitで複数ページのWebアプリを作る【2022年版】

Posted at

以前、Streamlitで複数ページのWebアプリを作るという記事を書きましたが、公式に複数ページアプリの対応がされたようなので試してみました。

これまではどうしていたか?

これまでもマルチページなアプリを作ることはできていましたが、裏技的な操作が必要でした。

MultiPageなアプリの作成

公式ドキュメントがあるので、そちらを確認してもらうのが早いと思います。
以下、私の理解を書き連ねておきます。

構成

複数ページのアプリを作成するためには、基本的にはページに対応するpythonファイルを置くだけです。

ホームに対応するpythonファイルと同じディレクトリに、 pages ディレクトリを作成し、その下にpythonファイルを配置します。その他のディレクトリにファイルがあっても無視されるようです。

- src
  |- home.py
  |- pages/
       |- page1.py
       |- page2.py

これで、 home.py をrootに、サイドバーに page1page2 が表示されるようになります。
↓こんな感じでページへのリンクがサイドバーに固定表示されます(下図オレンジで囲った部分)。

スクリーンショット 2022-09-28 9.48.37.png

サイドバーに表示されるページ名のルール

表示ルール、表示順のルールについては公式ドキュメントが正確なのでこちらを見てもらえればと思います。

ファイル名の構成要素

以下のような構成でファイル名をブロックにわけて扱うようです。

{prefix}_{label}.py
  • prefix: 数値
  • separator: _, -, (space)
  • label: prefixを除いた文字列

なお、これらの3つの要素全てを備えている必要はありません。

表示順序

  1. prefixがあれば、prefix(数値)でソート
  2. 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です。

できたもの

できたものはこんな感じ(あまり意味はないけど、ベータ分布とディリクレ分布を可視化してみた)。

streamlit_multi_app_sample.gif

ファイルを置いておくだけでMulti Pageなアプリができました。

参考

15
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?