【问题标题】:Django-Plotly-Dash retrieving URL slugDjango-Plotly-Dash 检索 URL slug
【发布时间】:2021-01-07 03:03:57
【问题描述】:

我想在 Django 框架中包含 plotly-dash。我希望将一个应用程序合并到一个 HTML 模板中,该模板将根据在 url 中输入的 slug 显示从 csv 读取为 pandas 数据框的线图。 csv 文件与 slug 具有相同的名称,以便于(我认为)打开它们。

我希望能够提取 url 路径或 slug,并使用它来确定我的应用程序打开并使用哪个 csv 文件来呈现线图的数据。

这仅适用于 Dash。我可以在回调中使用 url 和路径名,并将路径名用作 csv 文件的名称,并让应用程序根据 url slug 动态打开正确的 csv 文件。

@app.callback(
    Output('indicator-graphic', 'figure'), 
    [Input('url', 'pathname'),])
def update_graph(pathname): 
    df=pd.read_csv('path/to/file/'+pathname+'.csv)  

以上代码在 Dash 测试服务器中运行良好。当我将它合并到 Django 中时,url 和路径名将不再起作用。

我已经尝试了所有我能想到的将 slug 或路径名作为输入传递给 Dash 回调的方法。我什么都做不了。

然后,我尝试将数据帧设置为回调外部的全局变量并使用 django 的 HttpRequest 函数。但是当我尝试这样做时,它会返回并且路径为空。

from django.http import HttpRequest

request = HttpRequest
filename = str(request.path) 

df = pd.read_csv('path/to/file'+filename+'.csv) 

返回一个空字符串。

如何访问正确的 csv 文件?我需要从 Url 获取 slug 并使用它打开正确的 csv 文件以呈现正确的图形。

urls.py

urlpatterns = [
    path('', views.home, name='home'), 
    url('^django_plotly_dash/', include('django_plotly_dash.urls')), 
    re_path(r'^(?P<slug>[\w-]+)/$', views.coins, name='coins') ]

views.py

def home(request): 
return render(request, 'home/index.html') 

def coins(request, slug): 
    coin = Coins.objects.get(slug=slug) 
    return render(request, 'home/coins.html', {'coin':coin, 'chart_twitter': chart_twitter})

【问题讨论】:

    标签: python django csv plotly-dash


    【解决方案1】:

    这是在plotly社区论坛上回答的

    https://community.plotly.com/t/django-plotly-dash-how-to-get-url-or-slug/45134

    delsim 写道:

    你的模板里会有类似的东西

    {%plotly_app name="your-app-name" initial_arguments=some_dict %}

    您的视图在其中创建 some_dict 作为字典的 python 字典 - 外部 dict 有一个破折号组件 id 作为键,而内部 dict 是组件上的属性。因此,例如,如果您使用 id 为“hidden-div-for-slug”的隐藏 div 并使用子节点来存储 slug,您将拥有类似

    some_dict = {'hidden-div-for-slug': {'children': slug}}

    在你看来。您的 dash 应用程序现在具有 slug 或您选择从视图传播给它的任何信息,可在回调函数中使用。

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 1970-01-01
      • 2021-10-08
      • 2021-06-29
      • 2020-07-22
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2014-11-06
      相关资源
      最近更新 更多