How to use Chameleon Template Engine In Python
Creating a small project using Chameleon Template with project file structure as given below
Step1: Create a Pyramid project of Chameleon
Step 2: Now Create a Chameleon Template
Create a new Chameleon template file with the .pt extension. For example, I’m creating base.pt and home.pt in the project’s templates directory.
base.pt
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Wesbite</title>
</head>
<body>
<header>
<h1>Welcome to my website...!</h1>
</header>
<main>${content}</main>
<footer>© 2024 My Website</footer>
</body>
</html>
home.pt
<div>Heyy ${name}! Welcome to my Home Page!</div>
Step3: Write Pyramid View Function
Now, create a view function in default.py in views folder.
@view_config(route_name='another')
def home(request):
context = {'name': 'Rony'}
return render_to_response('project2:templates/home.pt', context, request=request)
Step4: Register route
register the view function in the routes.py file.
config.add_route('another', '/another')
Step 5 : To run the development server follow this command.
>> pserve development.ini
The project runs successfully to see that open the serving URL (http://127.0.0.1:6543) and open it on the browser.
Complete Code
#project2:views/default.py
from pyramid.view import view_config
from pyramid.renderers import render_to_response
@view_config(route_name='home', renderer='project2:templates/mytemplate.pt')
def my_view(request):
return {'project': 'project2'}
@view_config(route_name='another')
def home(request):
context = {'name': 'Rony'}
return render_to_response('project2:templates/home.pt', context, request=request)
#project2:routes.py
def includeme(config):
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/')
config.add_route('another', '/another')
#project2:templates/base.pt
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Wesbite</title>
</head>
<body>
<header>
<h1>Welcome to my website...!</h1>
</header>
<main>${content}</main>
<footer>© 2024 My Website</footer>
</body>
</html>
#project2:templates/home.pt
<div>Heyy ${name}! Welcome to my Home Page!</div>
Output:
Python Pyramid – Templates
Templates are a crucial part of any web application, enabling developers to create dynamic HTML content by embedding Python code within HTML. Pyramid supports several templating engines, including Jinja2, Chameleon, and Mako. Each of these engines has its own syntax and features, but they all serve the same basic purpose: to generate HTML content dynamically.
Concepts Related to Python Pyramid Templates
- Template Engines: Jinja2, Chameleon, and Mako are some of the templating engines that Python Pyramid supports. With these template engines, developers can write HTML pages dynamically by inserting Python code into HTML templates.
- Inheritance of Templates: It is possible to create a base template with common elements like headers, footers, or navigation bars in it and then extend this base template in child templates to add specific content; this feature is called template inheritance. It helps in reusing code and having consistent layouts across multiple pages.
- Template Context: The term “template context” refers to information passed from views (in Python) to templates. In Python Pyramid, you can pass data to templates either via the render() function or through context argument while rendering a template.