- 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
HTMLPage
class. - Create a
HTMLPage
object with specific head and body. - Custom tag creation by inheriting
Element
class which declared atmarkupify.tags
- Generate
*.html
files after creating html content withwrite()
method.
- Create an
CSSPage
class to create some css contents. - Generate
*.css
files. - Show tag structure like
<body> -> <div> -> h1 -> "This is heading one!"
or something. - Build html page with several parts.
pip install markupify
from 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
Element
class.
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" />