Wagtail integration (#17)
* Adds basic wagtail app to the website * Renames lca_website to cms_pages for clarity; re-instates pinax-boxes until we remove them from the templates * OOPS * Just Enough Wagtail * Removes the template view homepage from urls.py * OOPS * Makes the home page use a stream field * Removes an irrelevant migration that I accidentally introduced.
This commit is contained in:
parent
4c458fd584
commit
fdfe3c7045
17 changed files with 387 additions and 9 deletions
0
cms_pages/__init__.py
Normal file
0
cms_pages/__init__.py
Normal file
3
cms_pages/admin.py
Normal file
3
cms_pages/admin.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
7
cms_pages/apps.py
Normal file
7
cms_pages/apps.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class CmsPagesConfig(AppConfig):
|
||||
name = 'cms_pages'
|
70
cms_pages/migrations/0001_initial.py
Normal file
70
cms_pages/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,70 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-06-21 08:02
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import wagtail.wagtailcore.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('wagtailcore', '0028_merge'),
|
||||
('wagtailimages', '0013_make_rendition_upload_callable'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ContentPage',
|
||||
fields=[
|
||||
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
|
||||
('intro', models.CharField(max_length=250)),
|
||||
('body', wagtail.wagtailcore.fields.RichTextField(blank=True)),
|
||||
('image_display', models.IntegerField(choices=[(1, 'Banner with background feature image'), (2, 'No banner, circular vignette')])),
|
||||
('main_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.Image')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
bases=('wagtailcore.page',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='HomePage',
|
||||
fields=[
|
||||
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
|
||||
('body', wagtail.wagtailcore.fields.RichTextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
bases=('wagtailcore.page',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='NewsIndexPage',
|
||||
fields=[
|
||||
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
|
||||
('intro', wagtail.wagtailcore.fields.RichTextField(blank=True)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
bases=('wagtailcore.page',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='NewsPage',
|
||||
fields=[
|
||||
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
|
||||
('intro', models.CharField(max_length=250)),
|
||||
('body', wagtail.wagtailcore.fields.RichTextField(blank=True)),
|
||||
('date', models.DateField(verbose_name='Post date')),
|
||||
('main_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.Image')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
bases=('wagtailcore.page',),
|
||||
),
|
||||
]
|
23
cms_pages/migrations/0002_auto_20160621_0936.py
Normal file
23
cms_pages/migrations/0002_auto_20160621_0936.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.7 on 2016-06-21 09:36
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
import wagtail.wagtailcore.blocks
|
||||
import wagtail.wagtailcore.fields
|
||||
import wagtail.wagtailimages.blocks
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms_pages', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='homepage',
|
||||
name='body',
|
||||
field=wagtail.wagtailcore.fields.StreamField([('basic_content', wagtail.wagtailcore.blocks.StructBlock([('type', wagtail.wagtailcore.blocks.ChoiceBlock(choices=[(1, 'Left-aligned image, blue-filtered image BG'), (2, 'Right-aligned image, white background')])), ('heading', wagtail.wagtailcore.blocks.CharBlock(required=True)), ('inset_image', wagtail.wagtailimages.blocks.ImageChooserBlock()), ('background_image', wagtail.wagtailimages.blocks.ImageChooserBlock(help_text="This is used as the background image of a blue-left block. It's not used for white-right.", required=False)), ('body', wagtail.wagtailcore.blocks.RichTextBlock(required=True)), ('link', wagtail.wagtailcore.blocks.StructBlock([('page', wagtail.wagtailcore.blocks.PageChooserBlock()), ('title', wagtail.wagtailcore.blocks.CharBlock(required=True))]))]))]),
|
||||
),
|
||||
]
|
0
cms_pages/migrations/__init__.py
Normal file
0
cms_pages/migrations/__init__.py
Normal file
134
cms_pages/models.py
Normal file
134
cms_pages/models.py
Normal file
|
@ -0,0 +1,134 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
|
||||
from modelcluster.fields import ParentalKey
|
||||
|
||||
from wagtail.wagtailcore import blocks
|
||||
from wagtail.wagtailimages import blocks as imageblocks
|
||||
from wagtail.wagtailcore.models import Page
|
||||
from wagtail.wagtailcore.models import Orderable
|
||||
from wagtail.wagtailcore.fields import RichTextField
|
||||
from wagtail.wagtailcore.fields import StreamField
|
||||
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
|
||||
from wagtail.wagtailadmin.edit_handlers import InlinePanel
|
||||
from wagtail.wagtailadmin.edit_handlers import FieldPanel
|
||||
from wagtail.wagtailadmin.edit_handlers import PageChooserPanel
|
||||
from wagtail.wagtailadmin.edit_handlers import StreamFieldPanel
|
||||
from wagtail.wagtailsearch import index
|
||||
|
||||
|
||||
class HomePage(Page):
|
||||
|
||||
BASIC_CONTENT_BLUE_LEFT = 1
|
||||
BASIC_CONTENT_WHITE_RIGHT = 2
|
||||
BASIC_CONTENT_TYPES = (
|
||||
(BASIC_CONTENT_BLUE_LEFT, "Left-aligned image, blue-filtered image BG"),
|
||||
(BASIC_CONTENT_WHITE_RIGHT, "Right-aligned image, white background"),
|
||||
)
|
||||
|
||||
body = StreamField([
|
||||
("basic_content", blocks.StructBlock([
|
||||
("type", blocks.ChoiceBlock(
|
||||
choices=BASIC_CONTENT_TYPES,
|
||||
required=True,
|
||||
)),
|
||||
("heading", blocks.CharBlock(required=True)),
|
||||
("inset_image", imageblocks.ImageChooserBlock()),
|
||||
("background_image", imageblocks.ImageChooserBlock(
|
||||
required=False,
|
||||
help_text="This is used as the background image of a "
|
||||
"blue-left block. It's not used for white-right."
|
||||
)),
|
||||
("body", blocks.RichTextBlock(required=True)),
|
||||
("link", blocks.StructBlock([
|
||||
("page", blocks.PageChooserBlock()),
|
||||
("title", blocks.CharBlock(required=True)),
|
||||
])),
|
||||
])),
|
||||
# TODO: keynotes
|
||||
# TODO: other bits
|
||||
])
|
||||
|
||||
content_panels = Page.content_panels + [
|
||||
StreamFieldPanel('body')
|
||||
]
|
||||
|
||||
|
||||
# Content pages
|
||||
class AbstractContentPage(Page):
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
intro = models.CharField(max_length=250)
|
||||
body = RichTextField(blank=True)
|
||||
main_image = models.ForeignKey(
|
||||
'wagtailimages.Image',
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name='+'
|
||||
)
|
||||
|
||||
search_fields = Page.search_fields + [
|
||||
index.SearchField('intro'),
|
||||
index.SearchField('body'),
|
||||
]
|
||||
|
||||
content_panels = Page.content_panels + [
|
||||
ImageChooserPanel('main_image'),
|
||||
FieldPanel('intro'),
|
||||
FieldPanel('body', classname="full")
|
||||
]
|
||||
|
||||
|
||||
class ContentPage(AbstractContentPage):
|
||||
|
||||
IMAGE_DISPLAY_FEATURE = 1
|
||||
IMAGE_DISPLAY_VIGNETTE = 2
|
||||
|
||||
IMAGE_DISPLAY = (
|
||||
(IMAGE_DISPLAY_FEATURE, "Banner with background feature image"),
|
||||
(IMAGE_DISPLAY_VIGNETTE, "No banner, circular vignette"),
|
||||
)
|
||||
|
||||
image_display = models.IntegerField(
|
||||
choices=IMAGE_DISPLAY,
|
||||
)
|
||||
|
||||
def image_display_feature(self):
|
||||
return self.image_display == IMAGE_DISPLAY_FEATURE
|
||||
|
||||
def image_display_vignette(self):
|
||||
return self.image_display == IMAGE_DISPLAY_VIGNETTE
|
||||
|
||||
content_panels = [
|
||||
FieldPanel('image_display')
|
||||
] + AbstractContentPage.content_panels
|
||||
|
||||
|
||||
# News pages
|
||||
|
||||
class NewsIndexPage(Page):
|
||||
intro = RichTextField(blank=True)
|
||||
|
||||
subpage_types = [
|
||||
"NewsPage",
|
||||
]
|
||||
|
||||
content_panels = Page.content_panels + [
|
||||
FieldPanel('intro', classname="full"),
|
||||
]
|
||||
|
||||
|
||||
class NewsPage(AbstractContentPage):
|
||||
date = models.DateField("Post date")
|
||||
|
||||
parent_page_types = [
|
||||
NewsIndexPage,
|
||||
]
|
||||
|
||||
content_panels = AbstractContentPage.content_panels + [
|
||||
FieldPanel('date'),
|
||||
]
|
3
cms_pages/tests.py
Normal file
3
cms_pages/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
3
cms_pages/views.py
Normal file
3
cms_pages/views.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
|
@ -112,6 +112,8 @@ MIDDLEWARE_CLASSES = [
|
|||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"reversion.middleware.RevisionMiddleware",
|
||||
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||
'wagtail.wagtailcore.middleware.SiteMiddleware',
|
||||
'wagtail.wagtailredirects.middleware.RedirectMiddleware',
|
||||
]
|
||||
|
||||
ROOT_URLCONF = "pinaxcon.urls"
|
||||
|
@ -139,9 +141,23 @@ INSTALLED_APPS = [
|
|||
"reversion",
|
||||
"metron",
|
||||
"sitetree",
|
||||
"pinax.boxes",
|
||||
"pinax.eventlog",
|
||||
"pinax.pages",
|
||||
|
||||
# wagtail
|
||||
'wagtail.wagtailforms',
|
||||
'wagtail.wagtailredirects',
|
||||
'wagtail.wagtailembeds',
|
||||
'wagtail.wagtailsites',
|
||||
'wagtail.wagtailusers',
|
||||
'wagtail.wagtailsnippets',
|
||||
'wagtail.wagtaildocs',
|
||||
'wagtail.wagtailimages',
|
||||
'wagtail.wagtailsearch',
|
||||
'wagtail.wagtailadmin',
|
||||
'wagtail.wagtailcore',
|
||||
|
||||
'modelcluster',
|
||||
|
||||
|
||||
# symposion
|
||||
"symposion",
|
||||
|
@ -152,6 +168,7 @@ INSTALLED_APPS = [
|
|||
"symposion.speakers",
|
||||
"symposion.sponsorship",
|
||||
"symposion.teams",
|
||||
"pinax.boxes",
|
||||
|
||||
# Registrasion
|
||||
#"registrasion",
|
||||
|
@ -160,6 +177,7 @@ INSTALLED_APPS = [
|
|||
#"nested_admin",
|
||||
|
||||
# project
|
||||
"cms_pages",
|
||||
"pinaxcon",
|
||||
"pinaxcon.proposals",
|
||||
#"pinaxcon.registrasion",
|
||||
|
@ -222,8 +240,13 @@ PROPOSAL_FORMS = {
|
|||
"tutorial": "pinaxcon.proposals.forms.TutorialProposalForm",
|
||||
"miniconf": "pinaxcon.proposals.forms.MiniconfProposalForm",
|
||||
}
|
||||
PINAX_PAGES_HOOKSET = "pinaxcon.hooks.PinaxPagesHookSet"
|
||||
PINAX_BOXES_HOOKSET = "pinaxcon.hooks.PinaxBoxesHookSet"
|
||||
#PINAX_PAGES_HOOKSET = "pinaxcon.hooks.PinaxPagesHookSet"
|
||||
#PINAX_BOXES_HOOKSET = "pinaxcon.hooks.PinaxBoxesHookSet"
|
||||
|
||||
# Wagtail config
|
||||
WAGTAIL_SITE_NAME = 'linux.conf.au 2017'
|
||||
WAGTAIL_APPEND_SLASH = True
|
||||
|
||||
|
||||
ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
|
||||
|
||||
|
|
25
pinaxcon/templates/cms_pages/content_page.html
Normal file
25
pinaxcon/templates/cms_pages/content_page.html
Normal file
|
@ -0,0 +1,25 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load wagtailcore_tags %}
|
||||
{% load wagtailimages_tags %}
|
||||
|
||||
{% load sitetree %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block body_class %}template-blogpage{% endblock %}
|
||||
|
||||
{% block head_title %}{{ page.title }}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% block content %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
|
||||
{% if page.main_image %}
|
||||
{% image page.main_image width-400 %}
|
||||
{% endif %}
|
||||
|
||||
<div class="intro">{{ page.intro }}</div>
|
||||
|
||||
{{ page.body|richtext }}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
11
pinaxcon/templates/cms_pages/home_page.html
Normal file
11
pinaxcon/templates/cms_pages/home_page.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% load wagtailcore_tags %}
|
||||
|
||||
{% block head_title %}{% trans "Welcome" %}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{{ page.body }}
|
||||
{% endblock %}
|
35
pinaxcon/templates/cms_pages/news_index_page.html
Normal file
35
pinaxcon/templates/cms_pages/news_index_page.html
Normal file
|
@ -0,0 +1,35 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load wagtailcore_tags %}
|
||||
{% load wagtailimages_tags %}
|
||||
|
||||
{% load sitetree %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block body_class %}template-blogpage{% endblock %}
|
||||
|
||||
{% block head_title %}{{ page.title }}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% block content %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
|
||||
{% if page.main_image %}
|
||||
{% image page.main_image width-400 %}
|
||||
{% endif %}
|
||||
|
||||
<p class="meta">{{ page.date }}</p>
|
||||
|
||||
<div class="intro">{{ page.intro }}</div>
|
||||
|
||||
{% if page.get_children.specific %}
|
||||
<ul>
|
||||
{% for item in page.get_children.specific %}
|
||||
<li><a href="{{ item.url }}">{{ item.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% endblock %}
|
||||
{% endblock %}
|
27
pinaxcon/templates/cms_pages/news_page.html
Normal file
27
pinaxcon/templates/cms_pages/news_page.html
Normal file
|
@ -0,0 +1,27 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load wagtailcore_tags %}
|
||||
{% load wagtailimages_tags %}
|
||||
|
||||
{% load sitetree %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block body_class %}template-blogpage{% endblock %}
|
||||
|
||||
{% block head_title %}{{ page.title }}{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% block content %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
|
||||
{% if page.main_image %}
|
||||
{% image page.main_image width-400 %}
|
||||
{% endif %}
|
||||
|
||||
<p class="meta">{{ page.date }}</p>
|
||||
|
||||
<div class="intro">{{ page.intro }}</div>
|
||||
|
||||
{{ page.body|richtext }}
|
||||
{% endblock %}
|
||||
{% endblock %}
|
|
@ -1,12 +1,13 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load pinax_boxes_tags %}
|
||||
|
||||
{% load wagtailcore_tags %}
|
||||
|
||||
{% block head_title %}{% trans "Welcome" %}{% endblock %}
|
||||
|
||||
{% block body_class %}home{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{% box "homepage" %}
|
||||
{{ page.body|richtext }}
|
||||
{% endblock %}
|
||||
|
|
|
@ -3,13 +3,16 @@ from django.conf.urls import patterns, include, url
|
|||
from django.conf.urls.static import static
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from wagtail.wagtailadmin import urls as wagtailadmin_urls
|
||||
from wagtail.wagtailcore import urls as wagtail_urls
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
import symposion.views
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r"^$", TemplateView.as_view(template_name="homepage.html"), name="home"),
|
||||
#url(r"^$", TemplateView.as_view(template_name="homepage.html"), name="home"),
|
||||
url(r"^admin/", include(admin.site.urls)),
|
||||
|
||||
url(r"^account/", include("account.urls")),
|
||||
|
@ -25,7 +28,16 @@ urlpatterns = [
|
|||
url(r"^teams/", include("symposion.teams.urls")),
|
||||
|
||||
url(r"^boxes/", include("pinax.boxes.urls")),
|
||||
url(r"^", include("pinax.pages.urls")),
|
||||
|
||||
url(r'^cms/', include(wagtailadmin_urls)),
|
||||
|
||||
# Default catch-all for wagtail pages.
|
||||
url(r'^', include(wagtail_urls)),
|
||||
|
||||
# Matches *NOTHING* -- remove once site_tree is fixed
|
||||
url(r"^$", TemplateView.as_view(template_name="homepage.html"), name="home"),
|
||||
|
||||
|
||||
|
||||
# Required by registrasion
|
||||
# url(r'^register/', include('registrasion.urls')),
|
||||
|
|
|
@ -6,8 +6,9 @@ metron==1.3.7
|
|||
pinax-eventlog==1.1.1
|
||||
dj-static==0.0.6
|
||||
dj-database-url==0.4.0
|
||||
pinax-pages==0.4.2
|
||||
#pinax-pages==0.4.2
|
||||
pinax-boxes==2.1.2
|
||||
wagtail==1.5.2
|
||||
|
||||
# For testing
|
||||
django-nose==1.4.3
|
||||
|
|
Loading…
Reference in a new issue