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.0.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.0-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastapi_tags-0.5.0.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.0.tar.gz
Algorithm Hash digest
SHA256 8dd6b8f3da62b01917fa9c6e16daa425f6110793fb774a26ff631584984638c9
MD5 e6fa2609666e7278b46f9281adeb7294
BLAKE2b-256 511a5c6943cecf2892c5904cd67b7b250764ec482c406b700807eae047ebdefd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastapi_tags-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e3e418a9a380972becbf16645f2efecddd00840577bcabdf52027b4962946ebd
MD5 8bb3290efde2f9156bab32abf3151d63
BLAKE2b-256 c63382a5f95a0d88ec2e47fbaa39378674207838b4f2b73b7ba86b50468caf75

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