关于python:将Django模型类导入Plotly-Dash无状态应用程序

Import django model class into Plotly-Dash stateless app

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

文件夹结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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,表或类位于models.py文件中,名为general_finance_metrics

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

1
2
3
4
5
6
7
8
9
10
11
12
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应用程序不在单个应用程序内部而是在DASH应用程序内部DjangoProject。

Django:无法从另一个应用程序导入模型

Django 2 ImportError:无法导入模型

无法让Python从其他文件夹导入

将django模型类导入实用程序模块

appOne.py代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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代码:

1
2
3
4
5
6
7
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代码:

1
2
from django.contrib import admin
from .models import general_finance_metrics

urls.py代码:

1
2
3
4
5
6
7
from django.urls import path
from dash_apps.finished_apps import appOne
from . import views

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

index.html代码:

1
2
3
4
5
6
   <body>
      {% load plotly_dash %}
       
          {% plotly_app name='appOne' ratio=0.95 %}
       
   </body>

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

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


Dash和Django都提供了应用程序框架。如果要在另一个内部使用,则必须选择要嵌入的一个。

您是否要在Django中使用Dash?如果是这样,则django-plotly-dash包使您可以通过Django模板使用Dash应用程序。

另一方面,如果您尝试在Dash应用程序中使用Django片段-从代码段中听起来很像-那么您可能会发现相当困难,如果没有的话不可能。