FastAPI Tags
Adds s-expression HTML tags to FastAPI views. Inspired by FastHTML's use of fastcore's FT components.
Installation:
uv:
uv add fastapi-tags
pip:
pip install fastapi-tags
uv pip install fastapi-tags
Usage:
from fastapi import FastAPI
import fastapi_tags as tg
app = FastAPI()
@app.get("/", response_class=tg.TagResponse)
async def index():
return tg.Html(tg.H1("Hello, world!", style="color: blue;"))
If you want to do snippets, just skip the tg.Html tag:
@app.get("/time", response_class=tg.TagResponse)
async def time():
return tg.P("Time to do code!")
With HTMX
If you want to detect HTMX use dependency injection:
from fastapi import Depends
@app.get("/hello", response_class=tg.TagResponse)
def test_endpoint(is_htmx: bool = Depends(tg.is_htmx_request)):
if is_htmx:
return tg.H1("Hello, hx-request! Here's a partial of the page.")
else:
return tg.Html(tg.H1("Hello normal request, Here's the full page!"))
Custom Tags
There are several ways to create custom Tags
Subclassing
class AwesomeP(tg.P) -> tg.Tag:
def render(self) -> str:
return f"<p{self.attrs}>AWESOME {self.children}!</p>"
AwesomeP('library')
<p>AWESOME library!</p>
Custom tags built as functions
def PicoCard(header: str, body: str, footer: str) -> tg.Tag:
return tg.Article(
tg.Header(header),
body,
tg.Footer(footer)
)
@app.get("/card", response_class=tg.TagResponse)
async def card():
return PicoCard(
'FastAPI Tags',
'Adds s-expression HTML tags (Tags) to FastAPI views.',
'by various contributors'
)
<article>
<header>FastAPI Tags</header>
Adds s-expression HTML tags (Tags) to FastAPI views.
<footer>by various contributors</footer>
</article>
Raw HTML Content
For cases where you need to render raw HTML:
from fastapi_tags import RawHTML
# Render raw HTML content
raw_content = RawHTML('<strong>Bold text</strong> and <em>italic</em>')
# Note: RawHTML only accepts a single string argument
# For multiple elements, combine them first:
html_string = '<p>First</p><p>Second</p>'
raw = RawHTML(html_string)
Metadata
Release files for fastapi-tags 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| fastapi_tags-0.5.1.tar.gz | 12.3 kB | Without provenance | Details for fastapi_tags-0.5.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fastapi_tags-0.5.1-py3-none-any.whl | Python 3 | none | any | Details for fastapi_tags-0.5.1-py3-none-any.whl |
Total release size: 21.8 kB
Security for fastapi-tags 0.5.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.