I can't believe it actually works!

main
Jaap Joris Vens 2020-02-19 20:13:43 +01:00
rodzic c0464a5ab6
commit 25770feb57
11 zmienionych plików z 60 dodań i 76 usunięć

Wyświetl plik

@ -249,13 +249,10 @@ section {
} }
} }
section.contactsection { section.contact {
div#message { div#message {
display: none; display: none;
} }
textarea, input {
font-family: inherit;
}
} }
/* Form elements */ /* Form elements */

Wyświetl plik

@ -176,12 +176,9 @@ section {
text-align: center; text-align: center;
padding: 1em 0; } padding: 1em 0; }
section.contactsection div#message { section.contact div#message {
display: none; } display: none; }
section.contactsection textarea, section.contactsection input {
font-family: inherit; }
/* Form elements */ /* Form elements */
form.cms section { form.cms section {
margin-top: 3em; } margin-top: 3em; }

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -11,7 +11,7 @@
{% if user.is_staff %} {% if user.is_staff %}
<div class="edit page"> <div class="edit page">
<a href="{% if page.slug %}{% url 'cms:editpage' page.slug %}{% else %}{% url 'cms:editpage' %}{% endif %}"><img src="{% static 'cms/edit.svg' %}"></a> <a href="{% if page.slug %}{% url 'cms:updatepage' page.slug %}{% else %}{% url 'cms:updatepage' %}{% endif %}"><img src="{% static 'cms/edit.svg' %}"></a>
</div> </div>
{% endif %} {% endif %}

Wyświetl plik

@ -1,12 +1,12 @@
from django.urls import path from django.urls import path
from .views import PageView, EditPage, CreatePage from .views import PageView, CreatePage, UpdatePage
app_name = 'cms' app_name = 'cms'
urlpatterns = [ urlpatterns = [
path('edit/', EditPage.as_view(), name='editpage'), path('new/', CreatePage.as_view(), name='createpage'),
path('<slug:slug>/edit/', EditPage.as_view(), name='editpage'), path('edit/', UpdatePage.as_view(), name='updatepage'),
path('createpage/', CreatePage.as_view(), name='createpage'), path('<slug:slug>/edit/', UpdatePage.as_view(), name='updatepage'),
path('', PageView.as_view(), name='page'), path('', PageView.as_view(), name='page'),
path('<slug:slug>/', PageView.as_view(), name='page'), path('<slug:slug>/', PageView.as_view(), name='page'),
] ]

Wyświetl plik

@ -1,16 +1,13 @@
import json import json
import swapper import swapper
from django.views import generic from django.views.generic import base, detail, edit
from django.http import Http404 from django.http import Http404, HttpResponseRedirect
from django.shortcuts import redirect from django.shortcuts import redirect
from django.views.generic.edit import FormMixin
from django.views.generic.detail import SingleObjectMixin
from django.contrib.admin.utils import NestedObjects
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.mixins import UserPassesTestMixin from django.contrib.auth.mixins import UserPassesTestMixin
from django.http import HttpResponseRedirect, HttpResponseBadRequest #from django.http import HttpResponseRedirect, HttpResponseBadRequest
from .decorators import register_view from .decorators import register_view
from .forms import PageForm, SectionForm, SectionFormSet from .forms import PageForm, SectionForm, SectionFormSet
@ -32,7 +29,7 @@ class SectionView:
'''Override this to customize a section's context''' '''Override this to customize a section's context'''
return kwargs return kwargs
class SectionFormView(FormMixin, SectionView): class SectionFormView(edit.FormMixin, SectionView):
'''Generic section with associated form''' '''Generic section with associated form'''
def post(self, request): def post(self, request):
@ -44,7 +41,7 @@ class SectionFormView(FormMixin, SectionView):
return form return form
class SectionFormSetView(SectionView): class SectionFormSetView(SectionView):
'''Generic section with associated form''' '''Generic section with associated formset'''
formset_class = None formset_class = None
@ -65,7 +62,7 @@ class SectionFormSetView(SectionView):
kwargs['formset'] = self.get_formset() kwargs['formset'] = self.get_formset()
return super().get_context_data(**kwargs) return super().get_context_data(**kwargs)
class PageView(generic.DetailView): class PageView(detail.DetailView):
'''View of a page with heterogeneous (polymorphic) sections''' '''View of a page with heterogeneous (polymorphic) sections'''
model = Page model = Page
template_name = 'cms/page.html' template_name = 'cms/page.html'
@ -88,7 +85,7 @@ class PageView(generic.DetailView):
page = self.object = self.get_object() page = self.object = self.get_object()
except Http404: except Http404:
if self.request.user.has_perm('cms_page_create'): if self.request.user.has_perm('cms_page_create'):
return redirect('cms:editpage', self.kwargs['slug']) return redirect('cms:updatepage', self.kwargs['slug'])
else: else:
raise raise
context = self.get_context_data(**kwargs) context = self.get_context_data(**kwargs)
@ -134,34 +131,26 @@ class PageView(generic.DetailView):
}) })
return context return context
class EditPage(UserPassesTestMixin, generic.UpdateView): class EditPage(UserPassesTestMixin, edit.ModelFormMixin, base.TemplateResponseMixin, base.View):
model = Page model = Page
form_class = PageForm form_class = PageForm
template_name = 'cms/edit.html' template_name = 'cms/edit.html'
def test_func(self):
return self.request.user.has_perm('cms_page_change')
def setup(self, *args, slug='', **kwargs): def setup(self, *args, slug='', **kwargs):
'''Supply a default argument for slug''' '''Supply a default argument for slug'''
super().setup(*args, slug=slug, **kwargs) super().setup(*args, slug=slug, **kwargs)
def test_func(self):
return self.request.user.has_perm('cms_page_change')
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super().get_form_kwargs() kwargs = super().get_form_kwargs()
kwargs.update({'label_suffix': ''}) kwargs.update({
'label_suffix': '',
'initial': {'slug': self.kwargs['slug']},
})
return kwargs return kwargs
def form_valid(self, form):
object = form.save()
return redirect(object.get_absolute_url())
def get(self, request, *args, **kwargs):
try:
page = self.object = self.get_object()
except Http404:
return CreatePage.as_view()(request, slug=self.kwargs['slug'])
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
if 'formset' not in context: if 'formset' not in context:
@ -179,23 +168,30 @@ class EditPage(UserPassesTestMixin, generic.UpdateView):
}) })
return context return context
def get_object(self):
try:
return super().get_object()
except:
return None
def get(self, request, *args, **kwargs):
self.object = self.get_object()
return self.render_to_response(self.get_context_data())
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = self.get_object() self.object = self.get_object()
form = self.get_form() form = self.get_form()
formset = SectionFormSet(request.POST, request.FILES, instance=self.object) if form.is_valid():
if form.is_valid() and formset.is_valid(): page = form.save()
formset.save() formset = SectionFormSet(request.POST, request.FILES, instance=page)
return self.form_valid(form) if formset.is_valid():
else: formset.save()
return self.form_invalid(form, formset) return HttpResponseRedirect(page.get_absolute_url())
def form_invalid(self, form, formset):
return self.render_to_response(self.get_context_data(form=form, formset=formset)) return self.render_to_response(self.get_context_data(form=form, formset=formset))
class CreatePage(generic.CreateView): class CreatePage(EditPage):
model = Page def get_object(self):
form_class = PageForm pass
template_name = 'cms/edit.html'
def get_form_kwargs(self, *args, **kwargs): class UpdatePage(EditPage):
return {'initial': {'slug': self.kwargs['slug']}} pass

Wyświetl plik

@ -1,9 +1,7 @@
<section class="{{section.type}} color{{section.color}}"> <section class="button">
<div class="wrapper"> <div class="wrapper">
{% if section.button_text %} <div class="button">
<div class="button"> <a class="button" href="{{section.href}}">{{section.title}}</a>
<a class="button" href="{{section.button_link}}">{{section.button_text}}</a> </div>
</div>
{% endif %}
</div> </div>
</section> </section>

Wyświetl plik

@ -1,5 +1,5 @@
{% load i18n %} {% load i18n %}
<section class="{{section.type}} color{{section.color}}"> <section class="contact">
<div class="wrapper"> <div class="wrapper">
<div class="title"> <div class="title">
<h1>{{section.title}}</h1> <h1>{{section.title}}</h1>

Wyświetl plik

@ -1,6 +1,6 @@
{% load thumbnail %} {% load thumbnail %}
<section class="{{section.type}} color{{section.color}}"> <section class="image">
<div class="wrapper"> <div class="wrapper">
{% if section.image %} {% if section.image %}
<div class="image"> <div class="image">

Wyświetl plik

@ -1,19 +1,15 @@
{% load markdown %} {% load markdown %}
<section class="{{section.type}} color{{section.color}}"> <section class="text">
<div class="wrapper"> <div class="wrapper">
{% if section.title %} <div class="title">
<div class="title"> <h1>
<h1> {{section.title}}
{{section.title}} </h1>
</h1> </div>
</div>
{% endif %}
{% if section.content %} <div class="content">
<div class="content"> {{section.content|markdown}}
{{section.content|markdown}} </div>
</div>
{% endif %}
</div> </div>
</section> </section>

Wyświetl plik

@ -1,6 +1,6 @@
{% load embed_video_tags %} {% load embed_video_tags %}
<section class="{{section.type}} color{{section.color}}"> <section class="video">
<div class="wrapper"> <div class="wrapper">
{% if section.video %} {% if section.video %}
<div class="video"> <div class="video">