Add 404 custom page handling (#265)
This commit is contained in:
parent
2e41303b25
commit
8858754d40
@ -234,6 +234,38 @@ class App(Base):
|
|||||||
f"You cannot use multiple catchall for the same dynamic path ({route} !== {new_route})"
|
f"You cannot use multiple catchall for the same dynamic path ({route} !== {new_route})"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def add_custom_404_page(self, component, title=None, image=None, description=None):
|
||||||
|
"""Define a custom 404 page for any url having no match.
|
||||||
|
|
||||||
|
If there is no page defined on 'index' route, add the 404 page to it.
|
||||||
|
If there is no global catchall defined, add the 404 page with a catchall
|
||||||
|
|
||||||
|
Args:
|
||||||
|
component: The component to display at the page.
|
||||||
|
title: The title of the page.
|
||||||
|
description: The description of the page.
|
||||||
|
image: The image to display on the page.
|
||||||
|
"""
|
||||||
|
title = title or constants.TITLE_404
|
||||||
|
image = image or constants.FAVICON_404
|
||||||
|
description = description or constants.DESCRIPTION_404
|
||||||
|
|
||||||
|
component = component if isinstance(component, Component) else component()
|
||||||
|
|
||||||
|
compiler_utils.add_meta(
|
||||||
|
component, title=title, image=image, description=description
|
||||||
|
)
|
||||||
|
|
||||||
|
froute = utils.format_route
|
||||||
|
if (froute(constants.ROOT_404) not in self.pages) and (
|
||||||
|
not any(page.startswith("[[...") for page in self.pages)
|
||||||
|
):
|
||||||
|
self.pages[froute(constants.ROOT_404)] = component
|
||||||
|
if not any(
|
||||||
|
page.startswith("[...") or page.startswith("[[...") for page in self.pages
|
||||||
|
):
|
||||||
|
self.pages[froute(constants.SLUG_404)] = component
|
||||||
|
|
||||||
def compile(self, force_compile: bool = False):
|
def compile(self, force_compile: bool = False):
|
||||||
"""Compile the app and output it to the pages folder.
|
"""Compile the app and output it to the pages folder.
|
||||||
|
|
||||||
|
@ -211,3 +211,11 @@ class RouteRegex(SimpleNamespace):
|
|||||||
STRICT_CATCHALL = re.compile(r"\[\.{3}([a-zA-Z_][\w]*)\]")
|
STRICT_CATCHALL = re.compile(r"\[\.{3}([a-zA-Z_][\w]*)\]")
|
||||||
# group return the argname (i.e "slug")
|
# group return the argname (i.e "slug")
|
||||||
OPT_CATCHALL = re.compile(r"\[\[\.{3}([a-zA-Z_][\w]*)\]\]")
|
OPT_CATCHALL = re.compile(r"\[\[\.{3}([a-zA-Z_][\w]*)\]\]")
|
||||||
|
|
||||||
|
|
||||||
|
# 404 variables
|
||||||
|
ROOT_404 = ""
|
||||||
|
SLUG_404 = "[..._]"
|
||||||
|
TITLE_404 = "404 - Not Found"
|
||||||
|
FAVICON_404 = "favicon.ico"
|
||||||
|
DESCRIPTION_404 = "The page was not found"
|
||||||
|
Loading…
Reference in New Issue
Block a user