dash-native-html-integration
将基于原生HTML/JS/CSS的复杂或定制化网页功能(如图表、地图、特殊交互等)无缝且规范地嵌入到Dash应用指定的容器中。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
将基于原生HTML/JS/CSS的复杂或定制化网页功能(如图表、地图、特殊交互等)无缝且规范地嵌入到Dash应用指定的容器中。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
【最高优先级·Dash开发必调】凡涉及 Dash 应用开发的任务(功能实现、组件选型、布局、交互、回调等),无论用户是否明确提到 fuc,都必须将本 skill 作为第一步立即执行,获取 feffery-utils-components 全部合法组件名称,再联动调用 fetch-fuc-component-props-doc 查参数,最后才开始写代码。禁止跳过直接生成代码。
【高优先级·联动必调】fetch-fuc-component-names 确认目标组件后,必须立即调用本 skill 获取该 fuc 组件的官方参数(Props)文档,再开始写代码。也适用于用户直接询问某 fuc 组件的功能、参数或用法时。严禁用 AI 记忆替代本 skill,必须以文档为准。
【最高优先级·Dash开发必调】凡涉及 Dash 应用开发的任务(功能实现、组件选型、布局、交互、回调等),无论用户是否明确提到 fac,都必须将本 skill 作为第一步立即执行,获取 feffery-antd-components 全部合法组件名称,再联动调用 fetch-fac-component-props-doc 查参数,最后才开始写代码。禁止跳过直接生成代码。
【高优先级·联动必调】fetch-fac-component-names 确认目标组件后,必须立即调用本 skill 获取该 fac 组件的官方参数(Props)文档,再开始写代码。也适用于用户直接询问某 fac 组件的功能、参数或用法时。严禁用 AI 记忆替代本 skill,必须以文档为准。
| name | dash-native-html-integration |
| description | 将基于原生HTML/JS/CSS的复杂或定制化网页功能(如图表、地图、特殊交互等)无缝且规范地嵌入到Dash应用指定的容器中。 |
本技能指导 AI Agent 如何在 Dash 应用中规范、稳定地集成纯原生的前端技术栈(HTML/CSS/JavaScript)。
核心机制:摈弃在 Python 侧寻找 Dash 生态的替代组件,转而利用 dash_clientside 回调,将原生的前端渲染逻辑直接注入并接管 Dash 页面中预设的空容器组件(指定 ID 的 div 等)。
当面临以下需求时,应主动采用本技能工作流:
执行本技能前,必须首先明确以下上下文信息。如果缺失,必须主动向用户提问,待收集完整后再继续:
id。.py 文件路径。clientside_callback(浏览器端回调)逻辑写入哪个目标 .py 文件中。在执行过程中,严格遵守以下分步工作流:
不要急于修改 Dash 项目文件。首先,在系统外侧(或临时目录)生成一个纯净运行的 HTML 演示文件,确保底层前端逻辑可用且正确。
<div id="temp-target-container"></div> 内。class 和 id 必须足够特殊或带有前缀,绝不能污染当前 Dash 应用原有的样式。innerHTML 或调用第三方库的 dispose() 方法),确保该函数可被重复安全调用,不会发生 DOM 堆叠或内存泄露。在临时 HTML 验证无误后,将其核心逻辑拆解并工程化地融入到 Dash 项目中。
若 HTML 依赖外部 CDN 资源:
app = dash.Dash(...) 的入口文件。external_scripts 和 external_stylesheets 参数中。assets/css/ 目录下创建一个专门负责当前组件样式的独立 .css 文件。选择器限制在目标容器环境内。assets/js/ 目录下新建一个独立的 .js 文件,使用标准 Clientside API 封装:// 假设命名空间为 native_renderer,函数名为 render_my_feature
window.dash_clientside = Object.assign({}, window.dash_clientside, {
native_renderer: {
render_my_feature: function (targetId) {
// 设置轻微延时,确保 Dash DOM 完全渲染并挂载到文档流
setTimeout(() => {
const container = document.getElementById(targetId);
if (!container) return;
// ⚠️ 步骤 1:严格的清理动作,防止热重载或回调重复触发导致 DOM 叠加
// 例如:container.innerHTML = ''; 或者 instance.dispose();
// 🚀 步骤 2:植入从临时 HTML 提取来的原生渲染逻辑
// 将原有的 '#temp-target-container' 替换为传入的 container 对象
}, 200);
// 阻止 Dash 后端刷新此组件内容
return window.dash_clientside.no_update;
},
},
});
id(页面初次渲染时触发)来单次启动 JS 函数:from dash.dependencies import Input, Output, ClientsideFunction
# 若上文缺失 app 引用,需全局搜索定义位置并正确导入(如 from server import app)
app.clientside_callback(
ClientsideFunction(
namespace='native_renderer', # 对应 JS 中的命名空间
function_name='render_my_feature' # 对应 JS 中的函数名
),
Output('<目标组件ID>', 'children'),
Input('<目标组件ID>', 'id') # 核心机制:以自身 ID 为 Input,实现初次加载触发
)
app 实例是否已正确引入到了回调注册文件中(避免导包错漏)。HTML 文件原型。clientside_callback 必须且只能写在用户事前指定的回调管理文件内。