2016-08-19 5 views
0

Я потратил немало времени и не смог встроить участок bokeh в мое приложение для web2py.Как встраивать участок bokeh в 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. Я не создал страницу специально для функции plot с 1. Я надеялся, что это будет сделано как-то само по себе 2. Я понятия не имею, как встроить граф на страницу. – user3729625

ответ

2

В коде html это строка (из HTML-разметки). Когда действие web2py возвращает строку, эта строка возвращается непосредственно в браузер. Если вы пытаетесь загрузить этот HTML как полную веб-страницу, это не сработает, так как функция Bokeh file_html просто создает тег <script> с кодом Javascript. Он работает только в том случае, если вы встроили его в полную HTML-страницу и загрузите файлы Bokeh Javascript и CSS на странице. Для получения дополнительной информации см. Соответствующий Bokeh documentation.

Чтобы сделать эту работу в web2py, вы можете использовать response.files, чтобы включить необходимые файлы Javascript и CSS Bokeh, и вы можете встроить тег сценария, созданный 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 приложения и обслуживать их оттуда или использовать Bokeh CDN, как показано в своих документах).

Тогда в представлении для plot действия (например, /views/default/plot.html):

{{extend 'layout.html'}} 

{{=XML(bokeh_script)}} 

Обратите внимание, при вставке строки HTML-разметки непосредственно в представление web2py, вы должны обернуть он находится в XML(), чтобы предотвратить утечку web2py из HTML.

Наконец, предположим, что у вас установлены Python и Bokeh в вашей системе, обязательно запустите web2py из источника, а не с помощью двоичных файлов Windows или OSX, поскольку последние включают в себя собственные интерпретаторы Python и, следовательно, не могут импортировать библиотеки, установленные в вашей системе ,

+0

Большое вам спасибо. Это должно, вероятно, сделать трюк. Единственная проблема, с которой я сталкиваюсь сейчас, это то, что я не могу получить модуль bokeh в web2py. Любое простое решение, как я мог это исправить? Так как нет пунктов. – user3729625

+0

Я обновил ответ (в следующий раз обязательно укажите такие детали в исходном вопросе). Вы можете установить библиотеки Python через pip, а затем импортировать эти библиотеки в приложениях web2py. Тем не менее, вы должны запускать web2py из источника, чтобы использовать установку Python вашей системы - двоичные файлы Windows и OSX включают в себя собственные интерпретаторы Python и, следовательно, игнорируют установку Python вашей системы. – Anthony