Skip to content

Commit 5874ba6

Browse files
Phinart98lwasser
authored andcommitted
Features:
- Create separate publications app (renamed from blog) - Add static Django index pages at /blog/ and /events/ (no CMS setup needed) - Implement prefixed URLs: /blog/slug/ and /events/slug/ - Separate BlogPage and EventPage models completely - Add individual page templates for both content types
1 parent 56ae258 commit 5874ba6

22 files changed

+1009
-489
lines changed

blog/apps.py

Lines changed: 0 additions & 6 deletions
This file was deleted.

blog/migrations/0001_initial.py

Lines changed: 0 additions & 82 deletions
This file was deleted.

blog/migrations/0002_delete_homepage.py

Lines changed: 0 additions & 16 deletions
This file was deleted.

blog/migrations/0003_author_eventpage_remove_blogpage_intro_and_more.py

Lines changed: 0 additions & 106 deletions
This file was deleted.

core/urls.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@
55

66
urlpatterns = [
77
path('', views.home, name='home'),
8+
path('blog/', views.blog_index, name='blog_index'),
9+
path('events/', views.events_index, name='events_index'),
10+
path('blog/<slug:slug>/', views.serve_blog_page, name='blog_page'),
11+
path('events/<slug:slug>/', views.serve_event_page, name='event_page'),
812
]

core/views.py

Lines changed: 100 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
from django.shortcuts import render
1+
from django.shortcuts import render, get_object_or_404
22
import logging
33

44
from .utils import (
5-
get_recent_contributors,
5+
get_recent_contributors,
66
get_recent_packages,
7-
generate_github_avatar_url,
7+
generate_github_avatar_url,
88
generate_github_profile_url
99
)
10+
from publications.models import BlogPage, EventPage
1011

1112
logger = logging.getLogger(__name__)
1213

@@ -59,3 +60,99 @@ def home(request):
5960
'recent_packages': recent_packages,
6061
}
6162
return render(request, 'core/home.html', context)
63+
64+
65+
def blog_index(request):
66+
"""
67+
Blog index view for PyOpenSci.
68+
69+
Static Django view that queries Wagtail BlogPage instances
70+
to display all blog posts in a consistent index page.
71+
72+
Parameters
73+
----------
74+
request : HttpRequest
75+
Django HTTP request object.
76+
77+
Returns
78+
-------
79+
HttpResponse
80+
Rendered blog index page with blog posts.
81+
"""
82+
blog_posts = BlogPage.objects.live().select_related('author').order_by('-date')
83+
84+
context = {
85+
'page_title': 'pyOpenSci Blog',
86+
'hero_title': 'pyOpenSci Blog',
87+
'hero_subtitle': 'Here we will both post updates about pyOpenSci and also highlight contributors. We will also highlight new packages that have been reviewed and accepted into the pyOpenSci ecosystem.',
88+
'blog_posts': blog_posts,
89+
}
90+
return render(request, 'core/blog_index.html', context)
91+
92+
93+
def events_index(request):
94+
"""
95+
Events index view for PyOpenSci.
96+
97+
Static Django view that queries Wagtail EventPage instances
98+
to display all events in a consistent index page.
99+
100+
Parameters
101+
----------
102+
request : HttpRequest
103+
Django HTTP request object.
104+
105+
Returns
106+
-------
107+
HttpResponse
108+
Rendered events index page with events.
109+
"""
110+
events = EventPage.objects.live().select_related('author').prefetch_related('tags').order_by('-start_date')
111+
112+
context = {
113+
'page_title': 'pyOpenSci Events',
114+
'hero_title': 'pyOpenSci Events',
115+
'hero_subtitle': 'Join us for workshops, webinars, and community events. Connect with the scientific Python community and learn about open source best practices.',
116+
'events': events,
117+
}
118+
return render(request, 'core/events_index.html', context)
119+
120+
121+
def serve_blog_page(request, slug):
122+
"""
123+
Serve individual blog page with /blog/ prefix.
124+
125+
Parameters
126+
----------
127+
request : HttpRequest
128+
Django HTTP request object
129+
slug : str
130+
Page slug from URL
131+
132+
Returns
133+
-------
134+
HttpResponse
135+
Rendered blog page using Wagtail's serve mechanism
136+
"""
137+
page = get_object_or_404(BlogPage.objects.live().select_related('author'), slug=slug)
138+
return page.serve(request)
139+
140+
141+
def serve_event_page(request, slug):
142+
"""
143+
Serve individual event page with /events/ prefix.
144+
145+
Parameters
146+
----------
147+
request : HttpRequest
148+
Django HTTP request object
149+
slug : str
150+
Page slug from URL
151+
152+
Returns
153+
-------
154+
HttpResponse
155+
Rendered event page using Wagtail's serve mechanism
156+
"""
157+
page = get_object_or_404(EventPage.objects.live().select_related('author').prefetch_related('tags'), slug=slug)
158+
return page.serve(request)
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from django.contrib import admin
2-
3-
# Register your models here.
1+
from django.contrib import admin
2+
3+
# Register your models here.

publications/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class PublicationsConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'publications'

0 commit comments

Comments
 (0)