Created
March 13, 2014 19:52
-
-
Save kaedroho/9535628 to your computer and use it in GitHub Desktop.
Wagtail SuperPage class
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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