Python Django Plotly破折号检索URL段塞

Python Django Plotly破折号检索URL段塞,python,django,csv,plotly-dash,Python,Django,Csv,Plotly Dash,我想在Django框架中包含plotly dash。我想有一个应用程序纳入到一个HTML模板,将显示线图读为熊猫数据帧从csv的基础上输入的slug在url。csv文件与slug文件共享相同的名称,以便于(我认为)打开 我希望能够提取url路径或slug,并使用它来确定我的应用程序打开哪个csv文件并使用哪个csv文件来显示线条图的数据 这只不过是一个破折号。我可以在回调中使用url和路径名,并使用路径名作为csv文件的名称,让应用程序根据url slug动态打开正确的csv文件 @app.ca

我想在Django框架中包含plotly dash。我想有一个应用程序纳入到一个HTML模板,将显示线图读为熊猫数据帧从csv的基础上输入的slug在url。csv文件与slug文件共享相同的名称,以便于(我认为)打开

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

这只不过是一个破折号。我可以在回调中使用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回调。我找不到任何工作

然后,我尝试将dataframe设置为回调外部的全局变量,并使用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文件以呈现正确的图形

url.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') ]

这一点在精心策划的社区论坛上得到了回答

德尔西姆写道:

您的模板中将包含以下内容

{%plotly\u app name=“your app name”初始参数=some\u dict%}

在视图中,创建了一些作为python字典的dict——外部dict将一个破折号组件id作为键,而内部dict是组件上的属性。例如,如果您使用一个id为“hidden div for slug”的隐藏div,并使用子节点存储slug,您可能会遇到如下情况

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


在您的视图中。您的dash应用程序现在有了slug,或者您选择从视图传播到它的任何信息,这些信息可以在回调函数中使用。

plotly社区论坛上回答了这一问题

德尔西姆写道:

您的模板中将包含以下内容

{%plotly\u app name=“your app name”初始参数=some\u dict%}

您的视图创建了一些作为python字典的dict——外部dict有一个dash组件id作为键,内部dict是组件上的属性

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

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

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})