In this article, we will generate and use HTML documents in python by using tinyhtml module of python
How to write raw HTML to file using python?
You can generate HTML documents in Python by manually creating the HTML string and writing it to a file with a .html
extension. Here’s a simple example that generates HTML documents with a title, header, and body:
#Storing the entire HTML document in html variable
html = """
<html>
<head>
<title>AskPython</title>
</head>
<body>
<h1>Welcome to AskPython</h1>
<p>This is an article about generating HTML docs using python</p>
</body>
</html>
"""
#using file management
with open("askpython.html", "w") as f:
f.write(html)
In the above code, we have used the open() function with “w” mode which writes HTML in the file “askpython.html” this will create a file named “askpython.html” in the same directory with the following content:
<html>
<head>
<title>AskPython</title>
</head>
<body>
<h1>Welcome to AskPython</h1>
<p>This is an article about generating HTML docs using python</p>
</body>
</html>
To know more about file handling visit the article Python File Handling
The tinyhtml module for HTML documents
tinyhtml
is a python library that safely renders and provides a very basic HTML parsing functionality compact HTML5 from Python expressions. In this article we will install and use some useful functions provided by the tinyhtml library : html()
, render()
, h()
and frag()
Installing tinyhtml
We will start by installing tinyhtml
in our python environment using pip
pip install tinyhtml
1. Using html() and render() to declare and render basic HTML
html()
is used to declare HTML documents. Let’s start with a straightforward example:
from tinyhtml import html
html_content = html(lang="en")()
print(html_content.render())
Explanation:
- The code creates an HTML
html
element with thelang
attribute set to"en"
. - The
()
after thehtml
function call indicates that there are no child elements to add to thehtml
element. Therefore output contains just one HTML tag with an attribute - The
render
() method is then called on thehtml_content
variable, which converts thehtml
element to a string of HTML. - Finally, the resulting HTML string is printed to the console using the
print
function.
Output:
<!DOCTYPE html><html lang="en"></html>
2. Using the h() Function to Generate HTML Code in Python
The function h() is the most useful function, it provides for the rendering of attributes, common components, and void/self-closing elements.
Example:
from tinyhtml import html , h
html_content = html(lang="en")(
h("h1")("Lorem ipsum"),
h("p")("dolor sit amet."),
h ("br")
)
print(html_content.render())
Explanation:
- The code above creates an HTML document string containing an
html
element inside which, there are three child elements:- An
h1
element with the text “Lorem ipsum”. - A
p
element with the text “dolor sit amet.” - A
br
element, which represents a line break in HTML.
- An
- The
h
function is used to create theh1
andp
elements, and thebr
element is created directly using the HTML tag. - The
render
method is called on thehtml_content
variable, which converts thehtml
element and its child elements to a string of HTML and the resulting HTML string is printed using theprint
function.
Output:
<!DOCTYPE html><html lang="en"><h1>Lorem ipsum</h1><p>dolor sit amet.</p><br></html>
The output contains an HTML document string containing an html
element with the lang
attribute set to "en"
, an h1
element with the text “Lorem ipsum”, a p
element with the text “dolor sit amet.”, and a br
element.
3. Using frag() function to generate fragments of HTML code
The function frag() is used to circulate sets of elements.
from tinyhtml import h ,frag
content = frag(
h("h1")("Lorem ipsum"),
h("p")("dolor sit amet."),
)
print(content.render())
Explanation:
- The code creates a fragment of HTML containing an
h1
element with the text “Lorem ipsum” and ap
element with the text “dolor sit amet.”. - The
h
function is used to create theh1
andp
elements. - The
frag
function is then called with two arguments – theh1
andp
elements created earlier. This creates a fragment of HTML that contains both elements. - The
render
method is called on thecontent
variable and the resulting string is printed.
Output:
<h1>Lorem ipsum</h1><p>dolor sit amet.</p>
The output is an HTML fragment string containing an h1
element with the text “Lorem ipsum” and a p
element with the text “dolor sit amet.”.
4. Adding conditional statements
You can use conditional statements to generate data according to certain external conditions
from tinyhtml import h
score = input("Input your score(out of 100):")
passing_marks = 33
conditional_html = h("h1")(
h("p")("Passed")
if int(score) > passing_marks
else "Failed",
h("p")("Thank you!")
)
print(conditional_html)
Explanation:
- The code prompts the user to input their score out of 100, with the input value being stored in the
score
variable. The passing marks are set to 33. - The code then creates an HTML document string containing an
h1
element and two childp
elements. - The child element
p
has the text “Passed” if thescore
variable, after being converted to an integer, is greater than 33 (passing_marks
). - If the
score
variable is less than or equal to thepassing_marks
, then the text “Failed” is used instead of “Passed”.
Output:
Input your score(out of 100):45
<h1><p>Passed</p><p>Thank you!</p></h1>
5. Adding class to the tags
To initialize a class, we employ the “klass” operator. A trailing underscore is also added to additional labels that may match the names of Python-reserved keywords.
from tinyhtml import h
html_doc = h("h1")(
h("p" , klass = "p1")("Sample text"),
h("input" , for_ = "firstName")()
)
print(html_doc)
Here we have assigned class “p1” to the paragraph tag and used “klass” instead of “class”. For the input tag, we have used “for_” which is for the label “for” which is a reserved keyword in python. You can see the correct HTML in the given output
Output:
<h1><p class="p1">Sample text</p><input for="firstName"></input></h1>
Conclusion
In this article, we’ve created HTML documents using tinyhtml. We’ve provided a few basic tags that you can alter as necessary. Also, read Pandas to html.
References
https://pypi.org/project/tinyhtml/