- HTML5 tag creation with classes such as 
A()for<a></a>,Hr()for<hr />, etc. - Pretty printing the html content with 
pretty()method. - Create multiple html pages using 
HTMLPageclass. - Create a 
HTMLPageobject with specific head and body. - Custom tag creation by inheriting 
Elementclass which declared atmarkupify.tags - Generate 
*.htmlfiles after creating html content withwrite()method. 
- Create an 
CSSPageclass to create some css contents. - Generate 
*.cssfiles. - Show tag structure like 
<body> -> <div> -> h1 -> "This is heading one!"or something. - Build html page with several parts.
 
pip install markupifyfrom markupify.page import HTMLPage
from markupify.tags import Meta, Link, Title, Div, H, Comment
# Alternatively, you can import these classes from markupify directly:
# from markupify import HTMLPage, Meta, Link, Title, Div, H, Comment
page = HTMLPage()
meta = Meta(charset="UTF-8")
link = Link(href="css/styles.css", rel="stylesheet")
title = Title("My first website")
div = Div(
    tag_content=H(
        tag_content="Greetings text"
    )
)
comment = Comment("This is a comment")
page.add_tag_to_head(meta, link, title)
page.add_tag_to_body(comment, div)
print(page)Output:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><link href="css/styles.css" rel="stylesheet" /><title>My first website</title></head><body><!-- This is a comment --><div><h1>Greetings text</h1></div></body></html>To prettify that, use the pretty() method of the page object:
print(page.pretty())Output:
<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="utf-8"/>
  <link href="css/styles.css" rel="stylesheet"/>
  <title>
   My first website
  </title>
 </head>
 <body>
  <!-- This is a comment -->
  <div>
   <h1>
    Greetings text
   </h1>
  </div>
 </body>
</html>Also, you can create the page object with default head and body:
page = HTMLPage(
    head=Head(meta, link, title),
    body=Body(comment, div)
)If you want to get your html content as *.html file, you can use write() method:
page.write("index.html")Devs! Maybe I forgot to create some tags you need. Feel free to create them yourself by inheriting from the
Elementclass.
For example, create a double tag:
from typing import Optional, Union, Iterable
from markupify.tags import Element
class MyCustomTag(Element):
    def __init__(self, *tags: Union[Iterable[str], Iterable[Element]], **props):
        """
        A tag class to represent <my_tag> tag.
        """
        super().__init__(tag_name="my_tag", *tags, **props)
my_tag = MyCustomTag("This my custom tag! 🥳")
print(my_tag)Output:
<my_tag>This my custom tag! 🥳</my_tag>Add class property with add_properties
my_tag.add_properties(_class="custom my-tag")
print(my_tag)Output:
<my_tag class="custom my-tag">This my custom tag! 🥳</my_tag>Note
Some keywords like class are built-in names in Python. So you need to use them with underscore before them.
For example, instead of class, write _class and everything will be fine.
Create a single tag:
from markupify.tags import Element
class Vl(Element):
    def __init__(self, **props):
        """
        A tag class to represent <vl> (Vertical Line) tag.
        """
        super().__init__(tag_name="vl", has_end_tag=False, **props)
vl = Vl()
print(vl)Output:
<vl />Add width property with add_property
vl.add_property("width", "5px")
print(vl)Output:
<vl width="5px" />