2016-04-25 14 views
10

मैं एक Django HTML टेम्पलेट में एक साजिश पाई चार्ट एम्बेड करने की कोशिश कर रहा हूं। जब चार्ट 'ऑनलाइन मोड' में बनाया जाता है तो यह ठीक काम करता है (यानी एचटीएमएल स्निपेट साजिश सर्वर पर संग्रहीत है) लेकिन 'ऑफलाइन मोड' में नहीं (यानी जब एचटीएमएल स्थानीय रूप से संग्रहीत होता है)। बाद के मामले में, चार्ट प्रकट नहीं होता है। मैं अपने स्थानीय सर्वर पर एचटीएमएल स्टोर करने और वहां से भूखंडों को एम्बेड करने में सक्षम होना चाहता हूं।एक Django टेम्पलेट में एक प्लॉटली चार्ट एम्बेड करना

यहाँ है बिट है कि काम करता है:

import plotly.plotly as py 
import plotly.graph_objs as go 
labels = [1,2,3,4] 
values = [10,20,30,40] 
ndata = 100 
fig = { 
    'data': [{'labels': labels, 
      'values': values, 
      'type': 'pie', 
      'textposition':"none", 
      'textinfo':"percent", 
      'textfont':{'size':'12'}, 
      'showlegend':'false'}], 
    'layout': {'title': 'Total:'+str(ndata), 
      'showlegend':'false', 
      'height':'200', 
      'width':'200', 
      'autosize':'false', 
      'margin':{'t':'50','l':'75','r':'0','b':'10'}, 
      'separators':'.,'} 
} 
plotly_url = py.plot(fig, filename='myfile', auto_open=False) 
pie_url = '<iframe width="200" height="200" frameborder="0" seamless="seamless" scrolling="no" src='+plotly_url+'.embed?width=200&height=200&link=false&showlegend=false></iframe>' 

ध्यान दें कि pie_url रूप Http में एक स्ट्रिंग Django में अनुरोध प्रस्तुत करना पारित कर दिया है। टेम्पलेट का उपयोग कर स्ट्रिंग को एचटीएमएल के रूप में व्याख्या करता है सुरक्षित टैग, यानी {{pie_url | safe}}।

from plotly.offline import download_plotlyjs, plot 
import plotly.graph_objs as go 
labels = [1,2,3,4] 
values = [10,20,30,40] 
ndata = 100 
fig = { 
    'data': [{'labels': labels, 
      'values': values, 
      'type': 'pie', 
      'textposition':"none", 
      'textinfo':"percent", 
      'textfont':{'size':'12'}, 
      'showlegend':'false'}], 
    'layout': {'title': 'Total:'+str(ndata), 
      'showlegend':'false', 
      'height':'200', 
      'width':'200', 
      'autosize':'false', 
      'margin':{'t':'50','l':'75','r':'0','b':'10'}, 
      'separators':'.,'} 
} 
plotly_url = plot(fig, filename='file:///home/website/pie.html', auto_open=False) 
pie_url = '''<iframe width="200" height="200" frameborder="0" seamless="seamless" scrolling="no" src=\"'''+plotly_url+'''.embed?width=200&height=200&link=false&showlegend=false\"></iframe>''' 

किसी भी सलाह की सराहना की जाएगी:

यहाँ सा वह काम नहीं करता है।

+1

आप एक .html फ़ाइल के लिए यह उत्पादन करने में सक्षम हैं? – frankenapps

+0

हाय, हाँ, एचटीएमएल फाइल का उत्पादन हो जाता है। लेकिन यह तब प्रदर्शित नहीं होता है जब Django इसे प्रस्तुत करता है (यह मूल पोस्ट में pie_url पंक्ति है।) – Hooloovoo

उत्तर

20

किसी फ़ाइल को HTML लिखने के बजाय आप स्ट्रिंग के रूप में ग्राफ के HTML भाग को साजिशपूर्वक वापस कर सकते हैं। उदाहरण के लिए, एक वर्ग आधारित TemplateView का उपयोग कर:

import plotly.offline as opy 
import plotly.graph_objs as go 

class Graph(TemplateView): 
    template_name = 'graph.html' 

    def get_context_data(self, **kwargs): 
     context = super(Graph, self).get_context_data(**kwargs) 

     x = [-2,0,4,6,7] 
     y = [q**2-q+3 for q in x] 
     trace1 = go.Scatter(x=x, y=y, marker={'color': 'red', 'symbol': 104, 'size': "10"}, 
          mode="lines", name='1st Trace') 

     data=go.Data([trace1]) 
     layout=go.Layout(title="Meine Daten", xaxis={'title':'x1'}, yaxis={'title':'x2'}) 
     figure=go.Figure(data=data,layout=layout) 
     div = opy.plot(figure, auto_open=False, output_type='div') 

     context['graph'] = div 

     return context 

और टेम्पलेट:

{% if graph %} 
<div style="width:600;height:500"> 
{{ graph|safe }} 
</div> 
{% endif %} 
+1

आप शायद इस संदर्भ को प्रस्तुत करने के लिए इसे अपने विचारों में डाल सकते हैं 'जी = ग्राफ()' 'context = g.get_context_data() ' ' रिटर्न रेंडर (अनुरोध, 'ऐप/आँकड़े.html', संदर्भ) ' संपादित करें: सीधे यूआरएल में टेम्पलेट व्यू का उपयोग करें https://docs.djangoproject.com/en/1.10/ref/class-based- विचारों/आधार/# templateview – Naman

संबंधित मुद्दे