如何在Quarto Markdown中使用动态变量引用HTML图表文件
如何在Quarto Markdown中使用动态变量引用HTML图表文件
我懂你遇到的困扰了——在Quarto笔记本里,想用存储在变量里的动态文件名引用HTML图表,静态的iframe写法没问题,但换成变量就失效了对吧?我来给你分享几个可行的解决方案,顺便说说为啥你之前尝试的方法没起作用~
先说说你之前的问题出在哪
- 直接在
{=html}块里写iframe_str是没用的:Quarto的HTML块是纯静态内容,不会自动解析Python变量,它只会把iframe_str当成普通文本输出。 - PyScript的方法不适用:PyScript是在浏览器端运行的前端代码,而你的
corr_net_graph是Quarto编译时在Python环境里定义的后端变量,两者不在同一个上下文里,前端拿不到后端的变量值,所以才会出现你截图里把<py-script>标签当成src一部分的情况。
解决方案1:用Python代码块直接输出HTML
Quarto会自动渲染Python代码块的输出内容,如果输出是HTML格式,它会直接显示对应的元素。你可以这样写:
# 假设你的变量已经定义好了 corr_net_graph = "plot_userid.html" # 生成iframe的HTML字符串 iframe_html = f'<iframe width="900" height="1200" src="{corr_net_graph}"></iframe>' # 直接输出HTML,Quarto会渲染它 from IPython.display import HTML display(HTML(iframe_html))
如果你不想显示这段代码,可以给代码块加个选项隐藏代码:
#| echo: false corr_net_graph = "plot_userid.html" iframe_html = f'<iframe width="900" height="1200" src="{corr_net_graph}"></iframe>' from IPython.display import HTML display(HTML(iframe_html))
更简单的方式是直接print,Quarto同样会解析输出的HTML:
#| echo: false corr_net_graph = "plot_userid.html" print(f'<iframe width="900" height="1200" src="{corr_net_graph}"></iframe>')
解决方案2:用Quarto的内联Python表达式
Quarto支持在Markdown中用{{ 变量名 }}的方式直接插入Python变量的值,前提是这个变量已经在之前的代码块里定义过了。你可以直接在HTML块里这样写:
```{=html} <iframe width="900" height="1200" src="{{ corr_net_graph }}"></iframe>
比如你先在前面的Python块里定义变量: ```python corr_net_graph = "plot_userid.html"
然后上面的HTML块就会自动把{{ corr_net_graph }}替换成对应的文件名,完美实现动态引用~
这两种方法都能解决你的问题,选哪个看你习惯啦!
备注:内容来源于stack exchange,提问作者ViSa
相关产品推荐
相关产品推荐

