Skip to content

Commit 325b1ef

Browse files
29 - List View Route for Blog Posts
1 parent d4b8ce7 commit 325b1ef

File tree

7 files changed

+63
-2
lines changed

7 files changed

+63
-2
lines changed

full_stack_python/blog/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
from .list import blog_post_list_page
12
from .model import BlogPostModel
3+
from .state import BlogPostState
24

35
__all__= [
4-
'BlogPostModel'
6+
'blog_post_list_page',
7+
'BlogPostModel',
8+
'BlogPostState'
59
]

full_stack_python/blog/list.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import reflex as rx
2+
3+
from .. import navigation
4+
from ..ui.base import base_page
5+
6+
from . import state, model
7+
8+
def blog_post_detail_link(child: rx.Component, post: model.BlogPostModel):
9+
if post is None:
10+
return rx.fragment(child)
11+
post_id = post.id
12+
if post_id is None:
13+
return rx.fragment(child)
14+
root_path = navigation.routes.BLOG_POSTS_ROUTE
15+
post_detail_url = f"{root_path}/{post_id}"
16+
return rx.link(
17+
child,
18+
href=post_detail_url
19+
)
20+
21+
def blog_post_list_item(post: model.BlogPostModel):
22+
return rx.box(
23+
blog_post_detail_link(
24+
rx.heading(post.title),
25+
post
26+
),
27+
padding='1em'
28+
)
29+
30+
# def foreach_callback(text):
31+
# return rx.box(rx.text(text))
32+
33+
def blog_post_list_page() ->rx.Component:
34+
return base_page(
35+
rx.vstack(
36+
rx.heading("Blog Posts", size="5"),
37+
# rx.foreach(["abc", "abc", "cde"], foreach_callback),
38+
rx.foreach(state.BlogPostState.posts, blog_post_list_item),
39+
spacing="5",
40+
align="center",
41+
min_height="85vh",
42+
)
43+
)

full_stack_python/blog/state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def load_posts(self):
1313
with rx.session() as session:
1414
result = session.exec(
1515
select(BlogPostModel)
16-
)
16+
).all()
1717
self.posts = result
1818
# return
1919

full_stack_python/full_stack_python.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ def index() -> rx.Component:
4848
app.add_page(index)
4949
app.add_page(pages.about_page,
5050
route=navigation.routes.ABOUT_US_ROUTE)
51+
52+
app.add_page(
53+
blog.blog_post_list_page,
54+
route=navigation.routes.BLOG_POSTS_ROUTE,
55+
on_load=blog.BlogPostState.load_posts
56+
57+
)
58+
5159
app.add_page(contact.contact_page,
5260
route=navigation.routes.CONTACT_US_ROUTE)
5361
app.add_page(
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
HOME_ROUTE="/"
22
ABOUT_US_ROUTE="/about"
3+
BLOG_POSTS_ROUTE="/blog"
34
CONTACT_US_ROUTE="/contact"
45
CONTACT_ENTRIES_ROUTE="/contact/entries"
56
PRICING_ROUTE="/pricing"

full_stack_python/navigation/state.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ def to_home(self):
77
return rx.redirect(routes.HOME_ROUTE)
88
def to_about_us(self):
99
return rx.redirect(routes.ABOUT_US_ROUTE)
10+
def to_blog(self):
11+
return rx.redirect(routes.BLOG_POSTS_ROUTE)
1012
def to_contact(self):
1113
return rx.redirect(routes.CONTACT_US_ROUTE)
1214
def to_pricing(self):

full_stack_python/ui/nav.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def navbar() -> rx.Component:
3333
rx.hstack(
3434
navbar_link("Home", navigation.routes.HOME_ROUTE),
3535
navbar_link("About", navigation.routes.ABOUT_US_ROUTE),
36+
navbar_link("Blog", navigation.routes.BLOG_POSTS_ROUTE),
3637
navbar_link("Pricing", navigation.routes.PRICING_ROUTE),
3738
navbar_link("Contact", navigation.routes.CONTACT_US_ROUTE),
3839
spacing="5",
@@ -75,6 +76,8 @@ def navbar() -> rx.Component:
7576
on_click=navigation.NavState.to_home),
7677
rx.menu.item("About",
7778
on_click=navigation.NavState.to_about_us),
79+
rx.menu.item("Blog",
80+
on_click=navigation.NavState.to_blog),
7881
rx.menu.item("Pricing",
7982
on_click=navigation.NavState.to_pricing),
8083
rx.menu.item("Contact",

0 commit comments

Comments
 (0)