2
1

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.

Django3にPanelで作ったアプリケーション埋め込む

Last updated at Posted at 2022-07-23

Pythonで簡単にwebアプリケーションやダッシュボードの作成が行えるpanelライブラリ。

今回はpanelで作成したアプリケーションをDjango3で動かしてみたくなったので、公式のDocumentationを参考にやってみました.
公式の説明はDjango2を対象としていて,Django3で動かす場合は色々とつまずく点があったので備忘録として残します.


公式Documentation

完成図


以下のような感じでpanelで作成したデモアプリケーションをDjango上で表示します

スクリーンショット 2022-07-23 12.05.52.png

環境構築

pythonのバージョンは3.8.13を使用
その他ライブラリのバージョンはpanel/examples/apps/django_multi_apps/requirements.txtを参考にしてください(バージョン依存が激しいので注意)

githubにDjangoの設定ファイル・HTMLテンプレートPanelのデモアプリケーションがあるので、このdjango_multi_appsフォルダをダウンロードし

cd django_multi_apps
python manage.py runserver

でDjangoのサービスを起動する.
するとおそらく下記のエラーが表示されると思います.

  File "/Users/junya/opt/miniconda3/envs/panelqiita/lib/python3.8/site-packages/django/apps/config.py", line 38, in __init__
    raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: The app label 'bokeh.server.django' is not a valid Python identifier.

ググったところ,Django3でPanelを動かす場合にはDjango本体のコードを,下記のように一部書き換える必要があるとのことでした.

#miniconda3/envs/[仮想環境名]/lib/python3.8/site-packages/bokeh/server/django/apps.pyを書き換える

## 変更前
class DjangoBokehConfig(AppConfig):

    name = label = 'bokeh.server.django'

    _routes: Optional[RoutingConfiguration] = None

## 変更後
class DjangoBokehConfig(AppConfig):

    name = 'bokeh.server.django'
    label = 'bokeh_server_django'

    _routes: Optional[RoutingConfiguration] = None

これに伴ってdjango_multi_apps/urls.pyとrouting.pyも以下のように . を _ に変更する必要があります

###django_multi_apps/urls.py 29行目
## 変更前
from .themes import plot_themes

pn_app_config = apps.get_app_config('bokeh.server.django')


## 変更後
from .themes import plot_themes

pn_app_config = apps.get_app_config('bokeh_server_django')
###django_multi_apps/routing.py  5行目
## 変更前
bokeh_app_config = apps.get_app_config('bokeh.server.django')

## 変更後
bokeh_app_config = apps.get_app_config('bokeh_server_django')

公式のデモは基本的にDjango2を対象としているのでこんなことになっているようです。
変更後に再度Djangoを起動してみます

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
Django version 3.2, using settings 'django_multi_apps.settings'
Starting ASGI/Channels version 2.4.0 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

スクリーンショット 2022-07-23 13.03.56.png

今度は500エラーが返ってきました.migrateするよう警告が出ていたので,

python manage.py migrate

でmigrateして再度起動してみます.
今度はpanelで作成したアプリケーションが表示されました.
デモアプリは3つとも上手く表示できているようです.

スクリーンショット 2022-07-23 13.08.17.png

スクリーンショット 2022-07-23 13.09.35.png

スクリーンショット 2022-07-23 13.10.04.png

なんとかDjango3でpanelを動かすことができましたがライブラリの依存関係がかなり厳しいので実用は難しいかもしれません...
誰かのお役に立てば幸いです

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?