我想在浏览器中创建一个用python创建的表。可以使用DataTable
库的bokeh
来完成该部分。问题是我想在用户在表格中输入他/她的输入时从表格中提取数据。
我可以使用任何python库来做到这一点?如果我能用散景做这件事会更好。
答案 0 :(得分:0)
您可以使用BeautifulSoup来解析HTML内容,see this example
答案 1 :(得分:0)
如果您的要求是使用Python创建应用程序,用户将通过浏览器访问并将某些数据更新到表中?
使用Django或任何Web框架,基本上,您正在尝试构建一个Web应用程序!!
或
如果您正在寻找其他内容,请彻底提及您的要求。
答案 2 :(得分:0)
散景中使用的光滑网格数据表可以由用户直接编辑:http://bokeh.pydata.org/en/latest/docs/reference/models/widgets.tables.html。
由于数据表的每一列的数据可以对应于ColumnDataSource的字段,因此可以创建python或javascript回调,以检测表中数据值的任何更改。然后,您可以访问所需用例的更新数据。
以下是编辑数据时使用javascript回调的示例。编辑数据时,更新的列将打印到浏览器控制台。请注意,它只会在您编辑值然后单击单元格后检测到已更改的数据。
如果你想根据用户输入在python函数外运行,你可以使用python回调完全相同。这确实需要运行散景服务器才能工作。
from datetime import date
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource, CustomJS
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, StringEditor
output_file("data_table.html")
data = dict(
dates=[date(2014, 3, i+1) for i in range(10)],
strings=['edit_this' for i in range(10)],
)
source = ColumnDataSource(data)
columns = [
TableColumn(field="dates", title="Date", formatter=DateFormatter()),
TableColumn(field="strings", title="Downloads", editor=StringEditor()),
]
data_table = DataTable(source=source, columns=columns, width=400, height=280,
editable=True)
# callback code to detect user edit of table
code = """
data = source.data
console.log('data has been updated!')
console.log(data['strings'])
"""
callback = CustomJS(code=code,args={'source':source})
source.js_on_change('data', callback)
show(widgetbox(data_table))
修改强>
这是一个使用python回调的类似示例。编辑单元格时,在此示例中将替换所有单元格。显然你可以做你想做的事情,这只是一个例子。
您需要在源上设置回应以响应数据中的更改。因此source.on_change('data', update)
。例如,请阅读更多http://bokeh.pydata.org/en/latest/docs/user_guide/interaction/widgets.html#adding-widgets。
from datetime import date
from bokeh.io import curdoc
from bokeh.layouts import widgetbox
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, StringEditor
data = dict(
dates=[date(2014, 3, i+1) for i in range(10)],
strings=['edit_this' for i in range(10)],
)
source = ColumnDataSource(data)
columns = [
TableColumn(field="dates", title="Date", formatter=DateFormatter()),
TableColumn(field="strings", title="Downloads", editor=StringEditor()),
]
data_table = DataTable(source=source, columns=columns, width=400, height=280,
editable=True)
# callback code to detect user edit of table
def update(attrname, old, new):
data = source.data
data['strings'] = ['you just edited the table.']*10
source.data = data
source.on_change('data', update)
curdoc().add_root(widgetbox(data_table))