the template to extend from. So far we've covered how to create and display custom types of pages, but what if we want to extend them further with more advanced features? For example adding a form to the page and handling when a user submits the form. This type of logic would typically go into a view function, but since every Page instance is handled via the view function mezzanine.pages.views.page we can't create our own views for pages. Mezzanine solves this problem using Page Processors . Page Processors are simply functions that can be associated to any custom Page models and are then called inside the mezzanine.pages.views.page view when viewing the associated Page instance. A Page Processor will always be passed two arguments - the request and the Page instance, and can either return a dictionary that will be added to the template context, or it can return any of Django's HttpResponse classes which will override the mezzanine.pages.views.page view entirely. To associate a Page Processor to a custom Page model you must create the function for it in a module called page_processors.py inside one of your INSTALLED_APPS and decorate it using the decorator mezzanine.pages.page_processors.processo\\... . Continuing on from our author example, suppose we want to add an enquiry form to each author page. Our page_processors.py module in the author app would be as follows: The navigation tree in the admin where pages are managed will take into account any permissions defined using Django's permission system . For example if a