将 django 模型 class 导入 Plotly-Dash 无状态应用程序

Import django model class into Plotly-Dash stateless app

我正在尝试使用 django-plotly-dash 构建一个仪表板应用程序。从 .CSV 文件中提取数据时,我能够启动应用程序并 运行 但这很慢。为了加快速度,我将数据导入我的后端 Postgresql 服务器,并在我的 Django 项目的页面应用程序中创建了一个模型。当我尝试将特定 table 从我的模型导入到不同文件夹中的无状态 DjangDash 应用程序时,问题就来了。我不断收到的错误是 "unable to import pages.models"

文件夹结构:

DjangoProject
 >dash_apps
   >finished_apps
     -appOne.py
 >pages
   -__init__.py
   -admin.py
   -apps.py
   -models.py
   -test.py
 >base
   -__init__.py
   -asgi.py
   -routing.py
   -settings.py
   -urls.py
   -wsgi.py
 >templates
  >pages
   -index.html

 -manage.py
  

应用程序名为 appOne.py,table 或 class 在 models.py 文件中,名为 general_finance_metrics

到目前为止,我已经在我的 appOne.py 文件中尝试了以下操作,但没有成功:

from pages.models import general_finance_metrics 
      (error: unable to import 'pages.models' pylint (import-error))
from DjangoProject.pages.models import general_finance_metrics
      (error: unable to import 'DjangoProject.pages.models' pylint (import-error))
from .models import general_finance_metrics
      (error: attempted relative import beyond top-level package pylint (relative-beyond-top-level))
from base.models import general_finance_metrics
      (error: unable to import 'base.models' pylint (import-error))
from base import models
      (error: unable to import 'base' pylint (import-error))
from pages import models
      (error: unable to import 'pages' pylint (import-error))

我仔细研究了这些其他问题,但无法找到有效的答案,除非我忽略了它,但我相信我的情况与这些不同,因为 DASH 应用程序不在单个应用程序内,而是在Django 项目。

Can't get Python to import from a different folder

import django models classes into utility module

appOne.py代码:

import numpy as np
import pandas as pd
import datetime

import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.graph_objs as go
from django_plotly_dash import DjangoDash

from django.db import models
from pages.models import general_finance_metrics  # error occurs here

df = pd.DataFrame(general_finance_metrics.objects.all().values())

models.py代码:

class general_finance_metrics(models.Model):
    columnOne = models.TextField(blank=True, null=True)
    columnTwo = models.TextField(blank=True, null=True)
    columnThree = models.TextField(blank=True, null=True)
    
    def __str__(self):
        return self.columnOne 

admin.py代码:

from django.contrib import admin
from .models import general_finance_metrics

urls.py代码:

from django.urls import path
from dash_apps.finished_apps import appOne
from . import views

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

index.html代码:

   <body>
      {% load plotly_dash %}
        <div class="{% plotly_class name='appOne' %} card" style="height: 100%; width: 100%;">
          {% plotly_app name='appOne' ratio=0.95 %}
        </div>
   </body>

Dash 和 Django 都提供应用程序框架。如果你想在另一个中使用一个,那么你必须选择嵌入哪个。

您是否正在尝试在 Django 中使用 Dash?如果是这样,那么 django-plotly-dash 包允许您通过 Django 模板使用 Dash 应用程序。

另一方面,如果您尝试在 Dash 应用程序中使用 Django 的片段——从您的代码片段中听起来是这样的——那么您可能会发现这非常困难,如果不是的话不可能。

您需要确保 appOne.py 文件可以被 views.py 导入(以及任何其他正在使用它的文件)。 python 的旧版本将需要 dash_appsfinished_apps 文件夹中的 __init__.py 个文件。

一旦可以导入 appOne.py,其中的 from pages.models import general_finance_metrics 语句就足够了。