Skip to main content

A simple wrapper/generator for HTMX pages

Project description

PyHTMX

PyHTMX is a dead simple library to generate HTMX code in Python.

Inspired by this StackOverflow thread on how to generate HTML with XML.

Features

  • Outputs indented code
  • Outputs subtrees for the generated DOM
  • Children elements and content can be provided as lists
  • Building based on nested constructors or with statements

Installing

  $ python3 -m pip install pyhtmx-lib

Examples

First, an example based on nesting constructors:

  from pyhtmx import *

  html = Html(
    [
      Head(
        [
          Title('My Website'),
          Script(src="https://unpkg.com/htmx.org@2.0.3"),
        ]
      ),
      Body(
        [
          Header(
            [
              Img(src='/path/to/logo.png', _id="logo"),
              Nav(
                Ul(
                  [
                    Li(
                      "First item.",
                      hx_post="/first-item-clicked",
                      hx_trigger="click",
                      hx_target="#container-div",
                      hx_swap="innerHTML",
                    ),
                    Li("Second item."),
                    Li("Third item.")
                  ]
                ),
              ),
            ]
          ),
          Div(
            'Content here',
            _id="container-div",
          ),
          Footer([Hr(), 'Copyright 2024']),
        ]
      ),
    ]
  )

html.dump()

The example results in the following output:

<html>
  <head>
    <title>My Website</title>
    <script src="https://unpkg.com/htmx.org@2.0.3" />
  </head>
  <body>
    <header>
      <img src="/path/to/logo.png" id="logo" />
      <nav>
        <ul>
          <li hx-post="/first-item-clicked" hx-trigger="click" hx-target="#container-div" hx-swap="innerHTML">First item.</li>
          <li>Second item.</li>
          <li>Third item.</li>
        </ul>
      </nav>
    </header>
    <div id="container-div">Content here</div>
    <footer>
      <hr />
      <span>Copyright 2024</span>
    </footer>
  </body>
</html>

Now an example based on contexts defined with the with statement,

with Div(_class="btn-primary") as div:
  with A(href="/link/to/another/site"):
    with P("This is the first paragraph.", style="color: blue"):
      pass
  with P("Yet another paragraph.", style="color: red"):
    pass

div.dump()

which results in

<div class="btn-primary">
  <a href="/link/to/another/site">
    <p style="color: blue">This is the first paragraph.</p>
  </a>
  <p style="color: red">Yet another paragraph.</p>
</div>

Related projects

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

pyhtmx_lib-0.0.3.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

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

pyhtmx_lib-0.0.3-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file pyhtmx_lib-0.0.3.tar.gz.

File metadata

  • Download URL: pyhtmx_lib-0.0.3.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.10

File hashes

Hashes for pyhtmx_lib-0.0.3.tar.gz
Algorithm Hash digest
SHA256 151816cc0deceba005e7d9dd2fec055cdcb6eb4410193810a35d46557312e160
MD5 ff46f61cbe70e55c4e1a74322226e2fa
BLAKE2b-256 9ad88f1b2a32b5401184dd062e55c4f260fbf5fb65902648560dbb026ed18de7

See more details on using hashes here.

File details

Details for the file pyhtmx_lib-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: pyhtmx_lib-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.10

File hashes

Hashes for pyhtmx_lib-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 eb84a86a8a05e505615b666d9864c3d4f3215d615642c18aeebfa8e90f7b602b
MD5 20b8cb604e8341dbc8763a31becfc77e
BLAKE2b-256 206793bf8bab4f31405795913d24bb377497a9496257274d13781695c5f73c31

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