from fasthtml.common import *
from fasthtml.jupyter import JupyUvi, HTMX使用 Jupyter 编写 FastHTML
在Jupyter笔记本中编写FastHTML应用程序的过程与普通Python应用程序略有不同。
在Jupyter笔记本中编写FastHTML应用程序的过程与普通Python应用程序略有不同。
下载这个笔记本并自己试试看
此页面的源代码是一个 Jupyter notebook。这使得直接进行实验变得简单。然而,由于这是可工作的代码,这意味着我们必须注释掉一些内容以便文档能够构建。
第一步是导入必要的库。由于在Jupyter笔记本中使用FastHTML是一个特殊情况,因此它仍然是一个特殊的导入。
让我们创建一个应用程序,使用 fast_app。
app, rt = fast_app(pico=True)定义一个路由以测试应用程序。
@rt
def index():
return Titled('Hello, Jupyter',
P('Welcome to the FastHTML + Jupyter example'),
Button('Click', hx_get='/click', hx_target='#dest'),
Div(id='dest')
)使用 JupyUvi 创建一个 server 对象,同时启动 Uvicorn。server 在与 Jupyter 分开的线程中运行,因此可以在笔记本中使用正常的 HTTP 客户端功能。
server = JupyUvi(app)HTMX 可调用对象在 Jupyter notebook 中以 iframe 显示服务器的 HTMX 应用。传入与上述 JupyUvi 可调用对象使用的相同 port 变量,或者留空以使用默认值(8000)。
# This doesn't display in the docs - uncomment and run it to see it in action
# HTMX()我们没有定义 /click 路由,但这没关系 - 我们可以随时定义(或更改)它,它会动态插入到运行的应用程序中。无需重启或重新加载任何内容!
@rt
def click(): return P('You clicked me!')全屏视图
您可以通过访问 localhost:PORT 在 Jupyter 之外查看您的应用,其中 PORT 通常为默认的 8000,因此在大多数情况下只需点击 此链接。
优雅关机
使用下面显示的 server.stop() 函数。如果在不调用这一行的情况下重新启动 Jupyter,线程可能不会被释放,并且上述 HTMX 可调用对象可能会抛出错误。如果发生这种情况,一个快速的临时解决方案是在 JupyUvi 和 HTMX 中使用 port 参数指定一个不同的端口号。
处理悬挂线程的更好方案是终止悬挂线程(依赖于每个操作系统)或重启计算机。
server.stop()