You can render pages dynamically using Jinja templating language. To query data, you can update that context object that you pass to the template.
This can be done by adding a .py file with the same filename (e.g. index.py for index.md) with a get_context method.
Example
If you want to show a page to see users, make a users.html and users.py file in the www/ folder.
In users.py:
import frappe
def get_context(context):
context.users = frappe.get_list("User", fields=["first_name", "last_name"])
In users.html:
### List of Users
{% for user in users %}
2. {{ user.first_name }} {{ user.get("last_name", "") }}
{% endfor %}
Last updated 18 hours ago