Интеграция Holoviz Panel и Django для создания веб-приложений Dashboard

Я ищу любой рабочий пример проекта Django, интегрированного с Panel Apps. В руководстве пользователя есть раздел, в котором даются советы по интеграции. Но я не могу заставить его работать.

Поделитесь, пожалуйста, любыми доступными ресурсами в Интернете, демонстрирующими интеграцию.

Код, который я пробовал, выглядит следующим образом (и его варианты) Фактическая бизнес-логика здесь не важна. Я хочу успешно интегрировать панели Panel Dashboards и Django.

# project structure:
# myproject/
#   manage.py
#   myproject/
#     __init__.py
#     settings.py
#     urls.py
#     wsgi.py
#   app1/
#     __init__.py
#     apps.py
#     views.py
#   app2/
#     __init__.py
#     apps.py
#     views.py

# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1',
    'app2',
    'panel',
]

# myproject/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app1/', include('app1.urls')),
    path('app2/', include('app2.urls')),
]

# app1/apps.py
from django.apps import AppConfig

class App1Config(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'app1'

# app1/views.py
import panel as pn
from django.http import HttpResponse

def app1_panel(request):
    # Create a simple Panel app
    slider = pn.widgets.FloatSlider(start=0, end=10, name='Slider')
    text = pn.widgets.StaticText(name='Slider Value')

    @pn.depends(slider.param.value)
    def update_text(value):
        text.value = f"Slider value: {value:.2f}"

    app = pn.Column(slider, text)
    
    # Serve the Panel app
    return HttpResponse(app.servable())

# app1/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.app1_panel, name='app1_panel'),
]

# app2/apps.py
from django.apps import AppConfig

class App2Config(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'app2'

# app2/views.py
import panel as pn
import altair as alt
import pandas as pd
from django.http import HttpResponse

def app2_panel(request):
    # Create a simple Panel app with an Altair plot
    df = pd.DataFrame({'x': range(10), 'y': [i**2 for i in range(10)]})
    
    chart = alt.Chart(df).mark_line().encode(
        x='x',
        y='y'
    ).properties(
        title='Square Function',
        width=400,
        height=300
    )
    
    altair_pane = pn.pane.Vega(chart)
    
    app = pn.Column(
        pn.pane.Markdown("# App 2: Square Function Plot"),
        altair_pane
    )
    
    # Serve the Panel app
    return HttpResponse(app.servable())

# app2/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.app2_panel, name='app2_panel'),
]

# manage.py (no changes needed)

# Requirements (update requirements.txt):
# Django
# panel
# altair
# pandas
Вернуться на верх