Django-Plotly-Dash retrieving URL slug



我想在Django框架中包含plotly dash。我想把一个应用程序集成到一个HTML模板中,该模板将根据在url中输入的段塞从csv中以熊猫数据帧的形式显示线形图。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和路径名将不再工作。

我已经尝试了所有我能想到的方法,将段塞或路径名作为输入传递给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})

这个问题在的社区论坛上得到了回答

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

其中,您的视图将somedict创建为字典的python字典-外部dict具有dash组件id作为键,内部dict具有组件上的属性。例如,如果您使用id为"hiddendiv for slug"的隐藏div;并且使用子节点来存储段塞,你会得到类似的东西

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

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

最新更新