Dims
Dims

Reputation: 51229

Generate HTML from HTML template in python?

I want to design my own HTML template with tags like JSP or Jade and then pass data from python to it and let it generate full html page.

I don't want to construct document at python side like with DOM. Only data goes to page and page tempalte decides, how data lays out.

I don't want to serve resulting pages with HTTP, only generate HTML files.

Is it possible?

UPDATE

I found Jinja2, but I has strange boilerplate requirements. For example, they want me to create environment with

env = Environment(
    loader=PackageLoader('yourapplication', 'templates'),
    autoescape=select_autoescape(['html', 'xml'])
)

while saying that package yourapplication not found. If I remove loader parameter, it complains on line

template = env.get_template('mytemplate.html')

saying

no loader for this environment specified

Can I just read template from disk and populate it with variables, without extra things?

Upvotes: 2

Views: 11227

Answers (1)

Max Malysh
Max Malysh

Reputation: 31635

Just use the FileSystemLoader:

import os
import glob
from jinja2 import Environment, FileSystemLoader

# Create the jinja2 environment.
current_directory = os.path.dirname(os.path.abspath(__file__))
env = Environment(loader=FileSystemLoader(current_directory))

# Find all files with the j2 extension in the current directory
templates = glob.glob('*.j2') 

def render_template(filename):
    return env.get_template(filename).render(
        foo='Hello',
        bar='World'
    )

for f in templates:
    rendered_string = render_template(f)
    print(rendered_string)
    

example.j2:

<html>
    <head></head>
    <body>
        <p><i>{{ foo }}</i></p>
        <p><b>{{ bar }}</b></p>
    </body>
</html>

Upvotes: 6

Related Questions