Feat(UI): Blog with article page and Newsletter signup form.

This commit is contained in:
2025-08-09 19:07:58 +01:00
parent 2541aaf849
commit 36d9eb6888
51 changed files with 3434 additions and 892 deletions

View File

@@ -111,6 +111,8 @@ class Model_View_Base(BaseModel, ABC):
ENDPOINT_PAGE_ACCESSIBILITY_STATEMENT: ClassVar[str] = 'routes_legal.accessibility_statement'
ENDPOINT_PAGE_APPLY_FOUNDING_PARTNER: ClassVar[str] = 'routes_core_apply_founding_partner.apply_founding_partner'
ENDPOINT_PAGE_APPLY_FOUNDING_PARTNER_SUCCESS: ClassVar[str] = 'routes_core_apply_founding_partner.apply_founding_partner_success'
# ENDPOINT_PAGE_BLOG_NEWSLETTER: ClassVar[str] = 'routes_blog.blog_newsletter'
ENDPOINT_PAGE_BLOG_NEWSLETTER_SUCCESS: ClassVar[str] = 'routes_blog.blog_newsletter_success'
ENDPOINT_PAGE_CONTACT: ClassVar[str] = 'routes_core_contact.contact'
ENDPOINT_PAGE_CONTACT_SUCCESS: ClassVar[str] = 'routes_core_contact.contact_success'
ENDPOINT_PAGE_DATA_RETENTION_SCHEDULE: ClassVar[str] = 'routes_legal.retention_schedule'
@@ -273,12 +275,14 @@ class Model_View_Base(BaseModel, ABC):
HASH_PAGE_ADMIN_HOME: ClassVar[str] = '/admin'
HASH_PAGE_APPLY_FOUNDING_PARTNER: ClassVar[str] = '/apply-founding-partner'
HASH_PAGE_APPLY_FOUNDING_PARTNER_SUCCESS: ClassVar[str] = '/apply-founding-partner-success'#
HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS: ClassVar[str] = '/blog/article/how-to-scale-your-dog-training-business-from-solo-to-multi-trainer-success'
HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS: ClassVar[str] = '/blog/article/the-science-behind-dog-training-assessments-how-to-track-real-progress'
HASH_PAGE_BLOG_ARTICLE_WHY_EVERY_TRAINER_NEEDS_A_COMMAND_DICTIONARY: ClassVar[str] = '/blog/article/why-every-professional-trainer-needs-a-command-dictionary-in-2025'
HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_25_TO_100_PLUS_CLIENTS: ClassVar[str] = '/blog/article/how-to-scale-your-dog-training-business-from-25-to-100-plus-clients'
HASH_PAGE_BLOG_ARTICLE_HOW_TO_SCALE_YOUR_DOG_TRAINING_BUSINESS_FROM_SOLO_TO_MULTI_TRAINER_SUCCESS: ClassVar[str] = '/blog/article/how-to-scale-your-dog-training-business-from-solo-to-multi-trainer-success'
HASH_PAGE_BLOG_ARTICLE_THE_SCIENCE_BEHIND_DOG_TRAINING_ASSESSMENTS_HOW_TRACK_REAL_PROGRESS: ClassVar[str] = '/blog/article/the-science-behind-dog-training-assessments-how-to-track-real-progress'
HASH_PAGE_BLOG_ARTICLE_WHY_EVERY_PROFESSIONAL_TRAINER_NEEDS_A_COMMAND_DICTIONARY_IN_2025: ClassVar[str] = '/blog/article/why-every-professional-trainer-needs-a-command-dictionary-in-2025'
HASH_PAGE_BLOG_CATEGORY_MARKETING_AND_GROWTH: ClassVar[str] = '/blog/category/marketing-and-growth'
HASH_PAGE_BLOG_CATEGORY_TRAINING_TECHNIQUES: ClassVar[str] = '/blog/category/training-techniques'
HASH_PAGE_BLOG_HOME: ClassVar[str] = '/blog/home'
HASH_PAGE_BLOG_NEWSLETTER_SUCCESS: ClassVar[str] = '/blog/newsletter-success'
HASH_PAGE_CONTACT: ClassVar[str] = '/contact'
HASH_PAGE_CONTACT_SUCCESS: ClassVar[str] = '/contact-success'
HASH_PAGE_DATA_RETENTION_SCHEDULE: ClassVar[str] = '/retention-schedule'
@@ -302,6 +306,7 @@ class Model_View_Base(BaseModel, ABC):
HASH_PAGE_USER_COMPANY: ClassVar[str] = '/user/company'
HASH_PAGE_USER_LOGIN: ClassVar[str] = '/login'
HASH_PAGE_USER_LOGOUT: ClassVar[str] = '/logout'
HASH_POST_BLOG_NEWSLETTER: ClassVar[str] = '/blog/post-newletter-form'
# HASH_SAVE_DOG_ASSESSMENT: ClassVar[str] = '/dog/save-assessment'
HASH_SAVE_DOG_ASSESSMENT_DISTRACTION_AND_RESPONSE: ClassVar[str] = '/dog/save-assessment-distraction-and-response'
HASH_SAVE_DOG_BUTTON_ICON: ClassVar[str] = '/dog/save-button-icon'

View File

@@ -11,6 +11,8 @@ Data model for home view
"""
# internal
# from forms.project_hub.contact import Form_Contact
from forms.project_hub.newsletter import Form_Newsletter
from models.model_view_base import Model_View_Base
# from routes import bp_home
# external
@@ -18,8 +20,12 @@ from typing import ClassVar
class Model_View_Blog_Home(Model_View_Base):
HASH_POST_NEWSLETTER_FORM: ClassVar[str] = '/blog/post-newsletter-form'
ID_NEWSLETTER_FORM: ClassVar[str] = 'form_newsletter'
def __init__(self, hash_page_current=Model_View_Base.HASH_PAGE_BLOG_HOME):
super().__init__(hash_page_current=hash_page_current)
form_newsletter: Form_Newsletter
def __init__(self, form_newsletter, hash_page_current=Model_View_Base.HASH_PAGE_BLOG_HOME):
super().__init__(hash_page_current = hash_page_current, form_newsletter = form_newsletter)
self._title = 'Blog Home'