Generators

If every document in a table (DocType) corresponds to a web-page, you can setup generators.

To setup a generator you must:

  1. Add a field route that specifies the route of the page
  2. Add a condition field to indicate whether a page is viewable or not.
  3. Add the doctype name in website_generators in hooks.py of your app.
  4. Subclass the controller from frappe.website.website_generator.WebsiteGenerator
  5. Create a template for your page
  6. Add custom properties (context) for the template
  7. Customize route and list view

Let us see this with the help of an example:

Example

1. Add fields

We added published, route in the DocType

Note: The field route is mandatory

Generator fields

2. Added Website Generator to Hooks

Since Job Opening is in erpnext, we have added to the list of existing generator hooks:

website_generators = ["Item Group", "Item", "Sales Partner", "Job Opening"]

If the website_generators property does not exist in your hooks.py, add it!

3. Controller

We add the website property to the JobOpening class in job_opening.py

In get_context, parents property will indicate the breadcrumbs

from frappe.website.website_generator import WebsiteGenerator from frappe import _

# subclass from WebsiteGenerator, not Document class JobOpening(WebsiteGenerator): website = frappe._dict( template = "templates/generators/job_opening.html", condition_field = "published", page_title_field = "job_title", )

def get_context(self, context): # show breadcrumbs context.parents = [{'name': 'jobs', 'title': _('All Jobs') }]

Note: Once you do this, you should see the "See in Website" link on the document form.

4. Add the template

Add the template in erpnext/templates/generators/job_opening.html

{% raw %}{% extends "templates/web.html" %}

{% block breadcrumbs %} {% include "templates/includes/breadcrumbs.html" %} {% endblock %}

{% block header %}

{{ job_title }}

{% endblock %}

{% block page_content %}

{{ description }} {{ _("Apply Now") }}

{% endblock %}{% endraw %}

5. Customizing List View

If you add a method get_list_view in the controller file (job_opening.py), you can set properties for the listview

def get_list_context(context): context.title = _("Jobs") context.introduction = _('Current Job Openings')

Discard
Save
This page has been updated since your last edit. Your draft may contain outdated content. Load Latest Version
Was this article helpful?

On this page

Review Changes ← Back to Content
Message Status Space Raised By Last update on