Skip to content

Instantly share code, notes, and snippets.

@vrslev
Last active May 28, 2024 10:08
Show Gist options
  • Save vrslev/6d0602bfa939a01844f645c608afb85a to your computer and use it in GitHub Desktop.
Save vrslev/6d0602bfa939a01844f645c608afb85a to your computer and use it in GitHub Desktop.
Automatic browser reloading in FastAPI
import os
import arel
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates("templates")
if _debug := os.getenv("DEBUG"):
hot_reload = arel.HotReload(paths=[arel.Path(".")])
app.add_websocket_route("/hot-reload", route=hot_reload, name="hot-reload")
app.add_event_handler("startup", hot_reload.startup)
app.add_event_handler("shutdown", hot_reload.shutdown)
templates.env.globals["DEBUG"] = _debug
templates.env.globals["hot_reload"] = hot_reload
@app.get("/")
def index(request: Request):
return templates.TemplateResponse("index.html", context={"request": request})
# run:
# DEBUG=true uvicorn main:app --reload
fastapi
uvicorn[standard]
arel
jinja2
<body>
{% block content %}{% endblock %}
<!-- Hot reload script -->
{% if DEBUG %} {{ hot_reload.script(url_for('hot-reload')) | safe }} {% endif
%}
</body>
{% extends "base.html" %} {% block content %} Hello, world! {% endblock %}
@vrslev
Copy link
Author

vrslev commented Oct 24, 2023

@dicolasi Please share your code 😊

@vrslev
Copy link
Author

vrslev commented Oct 24, 2023

@thisisthemurph I don't understand exactly your setup. Can you share a minimal reproducible example of what you're saying?

@yanky2000
Copy link

It works in Safari (Version 17.2 (19617.1.17.11.9)) just fine.

@vrslev
Copy link
Author

vrslev commented Dec 20, 2023

It works in Safari (Version 17.2 (19617.1.17.11.9)) just fine.

@yanky2000 Just tested it in Safari 17.1—it also works. Removed the comment, thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment