Подключение к серверу панели Python (bokeh) отображает пустую html-страницу без сообщения об ошибке

У меня есть проект Django, в котором одна функция представления запускает сервер bokeh скриптом python.

Popen(["panel", "serve", "/opt/bitnami/projects/blog/EnviAI/scripts/visz_pn_ssm_1.py", "--show"])

В другом представлении я пытаюсь подключиться к серверу и отобразить приборную панель из visz_pn_ssm_1.py .

def redirect_bokeh_server(request):

    
    session = pull_session(url="http://localhost:5006/visz_pn_ssm_1")
    script = server_session(model=None,session_id=session.id,url="http://localhost:5006/visz_pn_ssm_1")

    return render(request, 'dashboard_ssm.html', {'script' : script})

в моем dashboard_ssm.html

<body>
    {{script | safe}}
</body>

Из консоли я получаю:
Запуск сервера Bokeh версии 2.4.2 (работает на Tornado 6.1)
2022-04-03 08:26:03,800 Хуки аутентификации пользователя НЕ предоставлены (пользователь по умолчанию включен)
2022-04-03 08:26:03,804 Приложение Bokeh запущено на: http://localhost:5006/visz_pn_ssm_12022-04-03
08:26:03,804 Запуск сервера Bokeh с идентификатором процесса: 269292022-04-03
08:26:06,550 WebSocket соединение открытоtest2022-04-03 08:26:07,762 ServerConnection created

Но страница пуста?

Содержание скрипта моей панели visz_pn_ssm_1.py:

import pandas as pd
import geopandas as gpd
import panel as pn
import hvplot.pandas
import pickle

pn.extension()
pn.config.js_files  = {'deck': 'https://unpkg.com/deck.gl@~5.2.0/deckgl.min.js'}
pn.config.css_files = ['https://api.tiles.mapbox.com/mapbox-gl-js/v0.44.1/mapbox-gl.css']

with open ('/opt/bitnami/projects/data/filepath_ssm_user.pickl', 'rb') as temp:
    res = pickle.load(temp)
    
# ried soil samples 30m 17-19
gdf = pd.read_csv(f'/opt/bitnami/projects/data/tables/{res[0]}'
            ,)[['date', 'ssm']].dropna().reset_index(drop=True)
gdf['date'] = gdf['date'].astype('datetime64[ns]')

#Options for Widgets
years = gdf.date.dt.year.unique()

# Widgets
year_slider = pn.widgets.IntSlider(name = 'Year', start=int(years.min()), end=int(years.max()), value=int(years[0]))
@pn.depends(year_slider)

def plot_data(year_slider):
    data_select = gdf[gdf['date'].dt.year == year_slider]
    
    # Scatter Plot
    scatter = data_select.hvplot.scatter(
        x = 'date',
        y = 'ssm',
        title = f'Oberflächennahe Bodenfeuchte'
    )
    
    return scatter

# Non Parameter Attributes
title = 'Oberflächennahe Bodenfeuchte berechnet mithilfe von Convolutional Neuronal Networks aus Sentinel 1 & 2 & ERA 5 Satelliten Daten'

header_box = pn.WidgetBox(title,
                          year_slider, 
                          align="center"
                         )

# Plot Box
dashboard = pn.Row(header_box, plot_data)

# To start with panel serve script
dashboard.servable()
Вернуться на верх