From 5d85341984bfbdf5cc32d29d7cd0ba5ba5f97c9e Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Thu, 17 Aug 2023 09:30:24 +0530 Subject: [PATCH] feat: Hook to add dynamic routes for other web view doctypes --- frappe/website/doctype/web_page/web_page.py | 11 +++++++++-- frappe/website/page_renderers/document_page.py | 2 +- frappe/website/router.py | 4 ++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/frappe/website/doctype/web_page/web_page.py b/frappe/website/doctype/web_page/web_page.py index dc9f004b3b..3c2d6a2ad0 100644 --- a/frappe/website/doctype/web_page/web_page.py +++ b/frappe/website/doctype/web_page/web_page.py @@ -286,6 +286,13 @@ def extract_script_and_style_tags(html): @redis_cache(ttl=60 * 60) def get_dynamic_web_pages() -> dict[str, str]: - return frappe.get_all( - "Web Page", fields=["name", "route", "modified"], filters=dict(published=1, dynamic_route=1) + pages = frappe.get_all( + "Web Page", + fields=["name", "route", "modified"], + filters=dict(published=1, dynamic_route=1), + update={"doctype": "Web Page"}, ) + get_web_pages_with_dynamic_routes = frappe.get_hooks("get_web_pages_with_dynamic_routes") or [] + for method in get_web_pages_with_dynamic_routes: + pages.extend(frappe.get_attr(method)()) + return pages diff --git a/frappe/website/page_renderers/document_page.py b/frappe/website/page_renderers/document_page.py index 826d1f3f9c..6cd59eb6a1 100644 --- a/frappe/website/page_renderers/document_page.py +++ b/frappe/website/page_renderers/document_page.py @@ -30,7 +30,7 @@ class DocumentPage(BaseTemplatePage): def search_web_page_dynamic_routes(self): d = get_page_info_from_web_page_with_dynamic_routes(self.path) if d: - self.doctype = "Web Page" + self.doctype = d.doctype self.docname = d.name return True else: diff --git a/frappe/website/router.py b/frappe/website/router.py index 72883a3e37..cae5d3f50f 100644 --- a/frappe/website/router.py +++ b/frappe/website/router.py @@ -21,8 +21,8 @@ def get_page_info_from_web_page_with_dynamic_routes(path): rules, page_info = [], {} for d in get_dynamic_web_pages(): - rules.append(Rule("/" + d.route, endpoint=d.name)) - d.doctype = "Web Page" + rules.append(Rule(f"/{d.route}", endpoint=d.name)) + d.doctype = d.doctype or "Web Page" page_info[d.name] = d end_point = evaluate_dynamic_routes(rules, path)