Skip to main content

Adds s-expression HTML tags to FastAPI views. Inspired by FastHTML's use of fastcore's FT components.

Project description

FastAPI Tags

Adds s-expression HTML tags to FastAPI views. Inspired by FastHTML's use of fastcore's FT components.

Test Package version Supported Python versions

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)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi_tags-0.5.1.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastapi_tags-0.5.1-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_tags-0.5.1.tar.gz.

File metadata

  • Download URL: fastapi_tags-0.5.1.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.3

File hashes

Hashes for fastapi_tags-0.5.1.tar.gz
Algorithm Hash digest
SHA256 b9b3b7197c1386d7dd53b5385e562b3a5ba1ad499d89ffe8985243473ffd601c
MD5 0bdb334a4f9a9d1b1fd0f29be37115e4
BLAKE2b-256 186341198a1c78395e7d23be597e5f3bbfec8fe57cc11ace6cd413e6ccf3e2d3

See more details on using hashes here.

File details

Details for the file fastapi_tags-0.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_tags-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4e4a4a9ee5d20aa1808dbba19e3d39ef97fd78bab5e253f7600bf3e4dd6d5251
MD5 6760d81d09438ae9707cfbe91e8e08df
BLAKE2b-256 6e30990f11ec744ed0ed026fa07e5d1c69b0515ea8279a698a28ced75bd48cd8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page