Skip to content

Instantly share code, notes, and snippets.

@kaedroho
Created March 13, 2014 19:52
Show Gist options
  • Save kaedroho/9535628 to your computer and use it in GitHub Desktop.
Save kaedroho/9535628 to your computer and use it in GitHub Desktop.
Wagtail SuperPage class
from django.template.response import TemplateResponse
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404
from wagtail.wagtailcore.models import Page
class SuperPage(Page):
ajax_template = None
def get_context(self, request):
return {
'self': self,
'request': request,
}
def get_template(self, request):
if request.is_ajax():
return self.ajax_template or self.template
else:
return self.template
def serve(self, request):
return TemplateResponse(
request,
self.get_template(request),
self.get_context(request)
)
@staticmethod
def subpage_url(regex, func, kwargs={}, name=None):
return RegexURLPattern(regex, func, kwargs, name)
def get_subpage_urls(self):
return [
self.subpage_url('^$', self.serve, name='main'),
]
def reverse_subpage(self, name, *args, **kwargs):
resolver = RegexURLResolver(r'^', self.get_subpage_urls())
return self.url + resolver.reverse(name, *args, **kwargs)
def resolve_subpage(self, path):
resolver = RegexURLResolver(r'^', self.get_subpage_urls())
return resolver.resolve(path)
def process_request(self, request, path):
try:
view, args, kwargs = self.resolve_subpage(path)
return view(request, *args, **kwargs)
except Resolver404:
pass
def route(self, request, path_components):
response = None
if self.live:
response = self.process_request(request, '/'.join(path_components) + '/')
if not response:
response = super(SuperPage, self).route(request, path_components)
return response
is_abstract = True
class Meta:
abstract = True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment