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

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyhtmx_lib-0.0.8.tar.gz
  • Upload date:
  • Size: 6.3 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.8.tar.gz
Algorithm Hash digest
SHA256 f4cc29ef33a73a9572c9c61a05d10e5e5038b63a4b63dcc9e76b04b0d10a5384
MD5 711438c3a030b6da4c500d2837ea8f52
BLAKE2b-256 4d3c59d4e1e1530edd7e9b2f08e98836d40219b72c3eb6c8012e413c3cec07e7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyhtmx_lib-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 6.6 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.8-py3-none-any.whl
Algorithm Hash digest
SHA256 7c7905463f663d39ac88b41544ee4b3746902a07588f2a7218aaf88ba541fd21
MD5 fdf7dd8e2ae7c22b1dfc3ff8dcbf1539
BLAKE2b-256 f892190c78cfdf393a145bba1ac629f244144b718856d606a4fb34587c337476

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