import os import dominate from dominate.tags import a from dominate.tags import br from dominate.tags import h3 from dominate.tags import img from dominate.tags import meta from dominate.tags import p from dominate.tags import table from dominate.tags import td from dominate.tags import tr class HTML: """This HTML class allows us to save images and write texts into a single HTML file. It consists of functions such as (add a text header to the HTML file), (add a row of images to the HTML file), and (save the HTML to the disk). It is based on Python library 'dominate', a Python library for creating and manipulating HTML documents using a DOM API. """ def __init__(self, web_dir, title, refresh=0): """Initialize the HTML classes Parameters: web_dir (str) -- a directory that stores the webpage. HTML file will be created at /index.html; images will be saved at 0: with self.doc.head: meta(http_equiv="refresh", content=str(refresh)) def get_image_dir(self): """Return the directory that stores images""" return self.img_dir def add_header(self, text): """Insert a header to the HTML file Parameters: text (str) -- the header text """ with self.doc: h3(text) def add_images(self, ims, txts, links, width=400): """add images to the HTML file Parameters: ims (str list) -- a list of image paths txts (str list) -- a list of image names shown on the website links (str list) -- a list of hyperref links; when you click an image, it will redirect you to a new page """ self.t = table(border=1, style="table-layout: fixed;") # Insert a table self.doc.add(self.t) with self.t: with tr(): for im, txt, link in zip(ims, txts, links): with td(style="word-wrap: break-word;", halign="center", valign="top"): with p(): with a(href=os.path.join("images", link)): img(style="width:%dpx" % width, src=os.path.join("images", im)) br() p(txt) def save(self): """save the current content to the HMTL file""" html_file = "%s/index.html" % self.web_dir f = open(html_file, "wt") f.write(self.doc.render()) f.close() if __name__ == "__main__": # we show an example usage here. html = HTML("web/", "test_html") html.add_header("hello world") ims, txts, links = [], [], [] for n in range(4): ims.append("image_%d.png" % n) txts.append("text_%d" % n) links.append("image_%d.png" % n) html.add_images(ims, txts, links) html.save()