Skip to content

Creating a Page

Page objects represent a single webpage on your site. They are rendered using the site's page decorator. You can pass any attributes into the Page class that you want to be available in your template. There are also some special variables that are used by Render Engine.

The most important attributes are template, content or content_path and the Page's Parser. These attributes tell the Page object how to render the output. That said, they are optional and render_engine will try to build the page without them.

# app.py
from render_engine import Site, Page

app = Site()

@app.page
class Index(Page):
  title="Welcome to my Page!"
  template="index.html"

Page Attributes

Because the template is rendered with Jinja2, you can use any Jinja2 syntax in the template file. For example, you can use the title variable in the template like this:

# templates/index.html

<h1>{{title}}</h1>

There are plenty of variables that are also inherited from the site as well

Pages with Content

If you have some content that you want to use on your page, you can define it in the content attribute. This is useful for small pages that don't need a lot of content.

@app.page
class About(Page):
  title="About Me"
  template="about.html"
  content="""
  I am a person who likes to write about things.
  """

Pages with Content Files

If you have a lot of content, you can define the content in a file and use the content_path attribute to point to that file. You'll need to make sure the file type is supported by a Parser and that the Parser is defined in the Page class.

# content/about.md

---
title: About Me
slug: about
name: Peter Parker
alias: Spiderman
---

I'm {{name}}. I'm a web developer and I like to write about things.

When there's trouble, I'm there to save the day! As your friendly neighborhood {{alias}}!

The top section of the file is the metadata for the Page. Most Parsers will use this to set the Page's attributes. The rest of the file is the content of the page. You can add attributes in the content file or in the Page itself.

# app.py

import render_engine.parsers.markdown import MarkdownPageParser

@app.page
class About(Page):
  template="about.html"
  Parser=MarkdownPageParser
  content_path="content/about.md"

Continue to Creating a Collection