[Fix issue 563] Add meta arg to page_add method (#589)
* Add meta arg to page_add method * Remove TypeError of "|". Set default param value.
This commit is contained in:
parent
fc29202b71
commit
f76acb2d9c
@ -199,6 +199,7 @@ class App(Base):
|
||||
image=constants.DEFAULT_IMAGE,
|
||||
on_load: Optional[EventHandler] = None,
|
||||
path: Optional[str] = None,
|
||||
meta: List[Dict] = constants.DEFAULT_META_LIST,
|
||||
):
|
||||
"""Add a page to the app.
|
||||
|
||||
@ -213,6 +214,7 @@ class App(Base):
|
||||
description: The description of the page.
|
||||
image: The image to display on the page.
|
||||
on_load: The event handler that will be called each time the page load.
|
||||
meta: The metadata of the page.
|
||||
"""
|
||||
if path is not None:
|
||||
utils.deprecate(
|
||||
@ -238,7 +240,7 @@ class App(Base):
|
||||
|
||||
# Add meta information to the component.
|
||||
compiler_utils.add_meta(
|
||||
component, title=title, image=image, description=description
|
||||
component, title=title, image=image, description=description, meta=meta
|
||||
)
|
||||
|
||||
# Format the route.
|
||||
@ -284,7 +286,14 @@ class App(Base):
|
||||
f"You cannot use multiple catchall for the same dynamic route ({route} !== {new_route})"
|
||||
)
|
||||
|
||||
def add_custom_404_page(self, component, title=None, image=None, description=None):
|
||||
def add_custom_404_page(
|
||||
self,
|
||||
component,
|
||||
title=None,
|
||||
image=None,
|
||||
description=None,
|
||||
meta=constants.DEFAULT_META_LIST,
|
||||
):
|
||||
"""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.
|
||||
@ -295,6 +304,7 @@ class App(Base):
|
||||
title: The title of the page.
|
||||
description: The description of the page.
|
||||
image: The image to display on the page.
|
||||
meta: The metadata of the page.
|
||||
"""
|
||||
title = title or constants.TITLE_404
|
||||
image = image or constants.FAVICON_404
|
||||
@ -303,7 +313,7 @@ class App(Base):
|
||||
component = component if isinstance(component, Component) else component()
|
||||
|
||||
compiler_utils.add_meta(
|
||||
component, title=title, image=image, description=description
|
||||
component, title=title, image=image, description=description, meta=meta
|
||||
)
|
||||
|
||||
froute = utils.format_route
|
||||
|
@ -16,6 +16,7 @@ from pynecone.components.base import (
|
||||
Image,
|
||||
Link,
|
||||
Main,
|
||||
Meta,
|
||||
Script,
|
||||
Title,
|
||||
)
|
||||
@ -277,7 +278,9 @@ def get_components_path() -> str:
|
||||
return os.path.join(constants.WEB_UTILS_DIR, "components" + constants.JS_EXT)
|
||||
|
||||
|
||||
def add_meta(page: Component, title: str, image: str, description: str) -> Component:
|
||||
def add_meta(
|
||||
page: Component, title: str, image: str, description: str, meta: List[Dict]
|
||||
) -> Component:
|
||||
"""Add metadata to a page.
|
||||
|
||||
Args:
|
||||
@ -285,15 +288,19 @@ def add_meta(page: Component, title: str, image: str, description: str) -> Compo
|
||||
title: The title of the page.
|
||||
image: The image for the page.
|
||||
description: The description of the page.
|
||||
meta: The metadata list.
|
||||
|
||||
Returns:
|
||||
The component with the metadata added.
|
||||
"""
|
||||
meta_tags = [Meta.create(**item) for item in meta]
|
||||
|
||||
page.children.append(
|
||||
Head.create(
|
||||
Title.create(title),
|
||||
Description.create(content=description),
|
||||
Image.create(content=image),
|
||||
*meta_tags,
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -4,4 +4,4 @@ from .body import Body
|
||||
from .document import ColorModeScript, DocumentHead, Html, Main, Script
|
||||
from .head import Head
|
||||
from .link import Link
|
||||
from .meta import Description, Image, Title
|
||||
from .meta import Description, Image, Meta, Title
|
||||
|
@ -30,13 +30,22 @@ class Meta(Component):
|
||||
|
||||
tag = "meta"
|
||||
|
||||
# The description of character encoding.
|
||||
char_set: Optional[str] = None
|
||||
|
||||
# The value of meta.
|
||||
content: Optional[str] = None
|
||||
|
||||
# The name of metadata.
|
||||
name: Optional[str] = None
|
||||
|
||||
# The type of metadata value.
|
||||
property: Optional[str] = None
|
||||
|
||||
|
||||
class Description(Meta):
|
||||
"""A component that displays the title of the current page."""
|
||||
|
||||
# The description of the page.
|
||||
content: Optional[str] = None
|
||||
|
||||
# The type of the description.
|
||||
name: str = "description"
|
||||
|
||||
@ -44,8 +53,5 @@ class Description(Meta):
|
||||
class Image(Meta):
|
||||
"""A component that displays the title of the current page."""
|
||||
|
||||
# The image of the page.
|
||||
content: Optional[str] = None
|
||||
|
||||
# The type of the image.
|
||||
property: str = "og:image"
|
||||
|
@ -124,6 +124,8 @@ DEFAULT_TITLE = "Pynecone App"
|
||||
DEFAULT_DESCRIPTION = "A Pynecone app."
|
||||
# The default image to show for Pynecone apps.
|
||||
DEFAULT_IMAGE = "favicon.ico"
|
||||
# The default meta list to show for Pynecone apps.
|
||||
DEFAULT_META_LIST = []
|
||||
|
||||
|
||||
# The gitignore file.
|
||||
|
Loading…
Reference in New Issue
Block a user