如何在 Dash table 中呈现超链接? (数据Table 或 dbc Table)
How do I render a hyperlink in a Dash table? (DataTable or dbc Table)
我目前正在将 Dash frontend interface (python), where I'm loading data from a Pandas dataframe 转换为 table。
我的问题是:如何在 table 中呈现超链接? 我对 Dash 的 DataTable component, but also with dbc Table(Dash Bootstrap 组件),我在我的实现中使用。
您可以在下面找到我如何将数据框加载到 dbc Table 组件中的简化和总结代码。基本上,当用户单击搜索按钮时,State
中的查询用作 POST
请求的参数。响应 JSON 已映射,在这里我尝试呈现超链接 - 到目前为止没有成功。
import dash_bootstrap_components as dbc
import pandas as pd
from dash import html, Input, Output, State
from app import app, backend_api
layout = html.Div(
dbc.Button("Search", id='search-button'),
dbc.Table(id="table"),
)
@app.callback(
Output(component_id='table', component_property='children'),
Input(component_id='search-button', component_property='n_clicks'),
State(component_id='query', component_property='value'),
State('session', 'data'),
)
def search(n_clicks, query, session):
if not is_token_valid(token):
return None
response_json = backend_api.post_json_secure("/api/search/search/", token=token, payload=query)
json_mapped = map_json(response_json)
data = pd.json_normalize(json_mapped)
table = dbc.Table.from_dataframe(data, striped=False, bordered=False, hover=False)
return table
def map_json(json):
# misc processing and try to render hyperlink
mapped = ({
"Column A": item["value_a"],
"Column B": item["value_b"],
"Column C": item["value_c"],
"Link": create_link(item["link"]),
} for item in json)
return mapped
def create_link(url):
# url is for example https://www.google.com
# return url # doesn't work
# return f'<a href="{url}"/> # doesn't work either
# how do I create a hyperlink here?
这是目前的结果 - 如您所见,Link
列中只有文本 - 我宁愿在此处使用真正的超链接。
使用 dbc Table 的解决方案(Dash Bootstrap 组件)
def create_link(url):
return html.A(html.P('Link'), href=url)
# alternatively use dcc.Link instead of html.A to prevent page refresh
使用 Dash 的数据Table 组件
的解决方案
这里必须在列配置中使用"presentation": "markdown"
:
# example with only one column and row
data_table = dash_table.DataTable(
id="table",
columns=[{"name": "link", "id": "column_link", "presentation": "markdown"}],
data=[{"html": '<a href="https://www.google.com">Link</a>'}],
markdown_options={"html": True},
)
结果:
我目前正在将 Dash frontend interface (python), where I'm loading data from a Pandas dataframe 转换为 table。
我的问题是:如何在 table 中呈现超链接? 我对 Dash 的 DataTable component, but also with dbc Table(Dash Bootstrap 组件),我在我的实现中使用。
您可以在下面找到我如何将数据框加载到 dbc Table 组件中的简化和总结代码。基本上,当用户单击搜索按钮时,State
中的查询用作 POST
请求的参数。响应 JSON 已映射,在这里我尝试呈现超链接 - 到目前为止没有成功。
import dash_bootstrap_components as dbc
import pandas as pd
from dash import html, Input, Output, State
from app import app, backend_api
layout = html.Div(
dbc.Button("Search", id='search-button'),
dbc.Table(id="table"),
)
@app.callback(
Output(component_id='table', component_property='children'),
Input(component_id='search-button', component_property='n_clicks'),
State(component_id='query', component_property='value'),
State('session', 'data'),
)
def search(n_clicks, query, session):
if not is_token_valid(token):
return None
response_json = backend_api.post_json_secure("/api/search/search/", token=token, payload=query)
json_mapped = map_json(response_json)
data = pd.json_normalize(json_mapped)
table = dbc.Table.from_dataframe(data, striped=False, bordered=False, hover=False)
return table
def map_json(json):
# misc processing and try to render hyperlink
mapped = ({
"Column A": item["value_a"],
"Column B": item["value_b"],
"Column C": item["value_c"],
"Link": create_link(item["link"]),
} for item in json)
return mapped
def create_link(url):
# url is for example https://www.google.com
# return url # doesn't work
# return f'<a href="{url}"/> # doesn't work either
# how do I create a hyperlink here?
这是目前的结果 - 如您所见,Link
列中只有文本 - 我宁愿在此处使用真正的超链接。
使用 dbc Table 的解决方案(Dash Bootstrap 组件)
def create_link(url):
return html.A(html.P('Link'), href=url)
# alternatively use dcc.Link instead of html.A to prevent page refresh
使用 Dash 的数据Table 组件
的解决方案这里必须在列配置中使用"presentation": "markdown"
:
# example with only one column and row
data_table = dash_table.DataTable(
id="table",
columns=[{"name": "link", "id": "column_link", "presentation": "markdown"}],
data=[{"html": '<a href="https://www.google.com">Link</a>'}],
markdown_options={"html": True},
)