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.5.tar.gz (6.0 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.5-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyhtmx_lib-0.0.5.tar.gz
  • Upload date:
  • Size: 6.0 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.5.tar.gz
Algorithm Hash digest
SHA256 4577c2658a71d09df306efcf9d4e3fa1c54927c04f100f5993f1032de835b5a6
MD5 a794d2edc4ac4d91e8a9866cd5360cf7
BLAKE2b-256 b4086b8a2d18eacd3de215439b3a7815148bbc8a4d0efa9e2a475fb6175191cb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyhtmx_lib-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 6.3 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 d541b5665a7b758902f79bc27dfc98cad3e7a63642be8b2d66e9474137c700f5
MD5 a7cb4fe7e29e8d5759e004f9d4f3d8ff
BLAKE2b-256 f65fd56004fd46d4e57e80735f5a7314b2fda385c6f7e848d61532b645a4b309

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