Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Htpy – generate HTML from Python without templates (htpy.dev)
7 points by pelme 6 months ago | hide | past | favorite | 2 comments
I built a library that to generate HTML from Python. We have been using this library with Django the last couple of months instead of classic templates and find it to be productive. It is easy to debug, works great with static type checkers and it is easy to build reusable components/partials. Give it a try!



Is that really easier than using templates?

> Wrapping Bootstrap Modal could be achieved with a function like this:

  def bootstrap_modal(*, title: str, body: Node = None, footer: Node = None) -> 
  Element:
      return div(".modal", tabindex="-1", role="dialog")[
          div(".modal-dialog", role="document")[
              div(".modal-content")[
                  div(".modal-header")[
                      div(".modal-title")[
                          h5(".modal-title")[title],
                          button(
                              ".close",
                              type="button",
                              data_dismiss="modal",
                              aria_label="Close",
                          )[span(aria_hidden="true")[Markup("×")]],
                      ]
                  ],
                  div(".modal-body")[body],
                  footer and div(".modal-footer")[footer],
              ]
          ]
      ]


Writing out the code to generate this may not be easier than using templates, but it is not really harder either. I think it mostly looks a little different.

The real benefit is using this bootstrap modal component within your app, since it is just a regular function call. You can leverage your editor "goto definition" and static type checking within all the functions make up your web sites/apps HTML.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: