将使用Django3中的Panel创建的应用程序嵌入

Python提供了一个简单易用的面板库,可以轻松创建web应用程序和仪表板。

 

因为我想在Django3上运行由panel创建的应用程序,所以我参考了官方文档进行了尝试。
官方文档是针对Django2的,但在Django3上运行时遇到了一些问题,所以将其作为备忘录记录下来。


公式文件

完成的图纸


在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错误。因为已经警告要进行迁移。

python manage.py migrate

我将迁移到新的环境,并尝试重新启动。
这一次,面板上创建的应用程序显示出来了。
所有三个演示应用程序似乎都能正常显示。

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

我终于在Django3中成功运行了面板,但是库的依赖关系非常严格,所以可能很难实际应用…
如果能对某人有所帮助就太好了。

广告
将在 10 秒后关闭
bannerAds