2016-08-19 55 views
0

我浪費了相當一段時間,無法在我的web2py應用程序中嵌入散景圖。如何在web2py中嵌入散景圖

我當前的代碼:

def plot(): 
    from bokeh.plotting import figure 
    from bokeh.resources import CDN 
    from bokeh.embed import file_html 

    plot = figure() 
    plot.circle([1,2], [3,4]) 

    html = file_html(plot, CDN, "my plot") 
    return (html) 

但沒有任何反應。我會很感激任何一個例子,它不一定非要特別。只是一個簡單的圖表。

親切的問候

+0

我們需要更多的代碼。你如何調用'plot'函數並嘗試將其輸出插入到頁面中? – Anthony

+0

我打電話給劇情功能,通過簡單的去www。 - ... -/default/plot。自從1以來,我還沒有專門爲plot函數創建過一個頁面。我希望它能以某種方式自己完成2.我不知道如何將圖形嵌入到頁面中。 – user3729625

回答

2

在你的代碼,html是(的HTML標記)的字符串。當web2py操作返回一個字符串時,該字符串直接返回給瀏覽器。如果您試圖將HTML作爲完整的網頁加載,則不起作用,因爲Bokeh file_html函數只是簡單地生成帶有JavaScript代碼的<script>標籤。只有將它嵌入完整的HTML頁面並在頁面中加載Bokeh Javascript和CSS文件時纔有效。有關詳細信息,請參閱相關Bokeh documentation

要在web2py中使用此工作,您可以使用response.files包含必要的Bokeh Javascript和CSS文件,並且可以將Bokeh生成的腳本標記嵌入到視圖中。

def plot(): 
    from bokeh.plotting import figure 
    from bokeh.resources import CDN 
    from bokeh.embed import file_html 

    response.files.extend(list_of_Bokeh_JS_and_CSS_static_file_URLs) 

    plot = figure() 
    plot.circle([1,2], [3,4]) 

    html = file_html(plot, CDN, "my plot") 
    return dict(bokeh_script=html) 

它是由你來指定散景JS的列表和CSS文件,並確保它們是可用的(你可以將它們複製到您的web2py應用的靜態文件夾,並從那裏爲他們服務,或使用背景虛化CDN如圖所示在他們的文檔中)。

在爲 plot動作視圖(例如,/views/default/plot.html)

然後:

{{extend 'layout.html'}} 

{{=XML(bokeh_script)}} 

注意,插入HTML標記的字符串直接進入web2py的視圖時,必須包它在XML()中阻止web2py轉義HTML。

最後,假設您的系統上安裝了Python和Bokeh,請確保從源代碼運行web2py,而不是使用Windows或OSX二進制文件,因爲後者包含它們自己的Python解釋器,因此無法導入安裝在系統上的庫。

+0

非常感謝。這應該可以做到這一點。我現在唯一的問題是,我無法將散焦模塊放入web2py。任何簡單的解決方案,我如何解決這個問題由於沒有點東西。 – user3729625

+0

我已經更新了答案(下次,請務必在原始問題中提及類似的細節)。您可以通過pip安裝Python庫,然後將這些庫導入到web2py應用程序中。但是,您必須從源代碼運行web2py才能使用系統的Python安裝--Windows和OSX二進制文件包含它們自己的Python解釋器,因此會忽略系統的Python安裝。 – Anthony