В коде 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 и, следовательно, не могут импортировать библиотеки, установленные в вашей системе ,
Нам нужно больше кода. Как вы вызываете функцию «plot» и пытаетесь вставить свой вывод на страницу? – Anthony
Я вызываю функцию сюжета, просто перейдя на www. - ... -/default/plot. Я не создал страницу специально для функции plot с 1. Я надеялся, что это будет сделано как-то само по себе 2. Я понятия не имею, как встроить граф на страницу. – user3729625