这是使用 Shiny.py,而不是 R Shiny。请参阅此处查看shiny.py 存储库。
我收到一条错误消息
"GET /script.js HTTP/1.1" 404 Not Found
。这是我根据本文档这里使用
ui.head_content(ui.include_js(js_file))
的时候。我正在与ui.include_css()
一起使用它。
应用程序.py
from shiny import App, render, ui
from htmltools.tags import div, script
from pathlib import Path
css_file = Path(__file__).parent / "www" / "stylesheet.css"
js_file = Path(__file__).parent / "www" / "script.js"
app_ui = ui.page_fluid(
ui.head_content(ui.include_js(js_file)),
ui.head_content(ui.include_css(css_file)),
div(
{"class": "redbkg"},
ui.h2("Hello Shiny!"),
ui.input_slider("n", "N", 0, 100, 20),
ui.output_text_verbatim("txt")
)
)
def server(input, output, session):
@output
@render.text
def txt():
return f"n*2 is {input.n() * 2}"
app = App(app_ui, server)
样式表.css
.redbkg{
background-color: rgb(241, 201, 201);
}
脚本.js
document.body.style.backgroundColor = "skyblue";
我在 this 资源之后尝试了一些其他操作,并使用 htmltools
script
来复制我通常在 R 中执行的操作(即正文之后的 script(src="script.js")
)。您可以在here查看 py-htmltools 的存储库。但是,我不断收到同样的错误。这可能是一个更广泛的问题,因为 css 文件单独工作,但 js 文件单独似乎不会影响任何东西(即使它在网络中被正确读取)。
我注意到在 Shiny py 存储库中有一个名为 http_staticfiles.py 的 file。其中写道:
在wasm模式下运行时我们不能使用starlette的StaticFiles, 因为它启动了一个线程。相反,使用我们自己的蹩脚版本。 幸运的是,这就是我们所需要的。
在本机Python模式下运行时,使用starlette StaticFiles 暗示;它经过了战斗考验,而我们的则没有。在 wasm 下,如果 我们的有错误,甚至安全漏洞:一切都在运行 浏览器沙箱包括文件系统,所以我们无能为力 披露攻击者尚无法访问。相同的是 在本机 Python 中运行时并非如此,我们希望像 有可能。
我想知道这是否是问题的提示,但不确定如何继续。
有人对这个问题有任何见解吗?
这是一个错误,已由 Joe Cheng 确认。该问题在 github
上提出当前的解决方法是:
defer=""
添加到 include_js()
调用include_js()
调用中。