--- a/qmsk_www_pages/pages.py Sun Sep 14 04:42:01 2014 +0300
+++ b/qmsk_www_pages/pages.py Sun Sep 14 04:58:01 2014 +0300
@@ -181,10 +181,26 @@
else:
title_default = None
+ parents = self.parents + (self, )
+
for path, file_name, file_type in self.scan():
# match on name
- if file_name != name:
+ if file_name != name and (file_name + '.' + file_type != name):
continue
+
+ # redirects?
+ if os.path.islink(path):
+ target = os.readlink(path)
+
+ # XXX: this should be some kind of common code
+ if '.' in target:
+ target, target_type = target.rsplit('.', 1)
+
+ log.info("%s: %s -> %s", self, name, target)
+
+ return RedirectPage(path, name, self, parents,
+ target = target,
+ )
# match on type
if not file_type:
@@ -198,12 +214,7 @@
# out
title = self.item_title(file_name) or title_default
- return page_type(
- path = path,
- name = name,
- tree = self,
- parents = self.parents + (self, ),
-
+ return page_type(path, name, self, parents,
title = title,
)
@@ -286,11 +297,27 @@
def modified (self):
return datetime.datetime.utcfromtimestamp(self.stat().st_mtime)
- def render (self, request):
+ def redirect_page (self, request):
+ return None
+
+ def render_html (self, request):
raise NotImplementedError()
+# TODO: tree redirects
+class RedirectPage (Page):
+ def __init__ (self, path, name, tree, parents,
+ target,
+ **opts
+ ) :
+ super(RedirectPage, self).__init__(path, name, tree, parents, **opts)
+
+ self.target = target
+
+ def redirect_page (self, request):
+ return os.path.normpath(self.tree.url() + '/' + self.target)
+
class HTML_Page (Page):
- def render (self, request):
+ def render_html (self, request):
return self.open().read()
SITE = Site.lookup()
--- a/qmsk_www_pages/views.py Sun Sep 14 04:42:01 2014 +0300
+++ b/qmsk_www_pages/views.py Sun Sep 14 04:58:01 2014 +0300
@@ -1,5 +1,5 @@
from django.http import Http404
-from django.shortcuts import render
+from django.shortcuts import render, redirect
from qmsk_www_pages import pages
@@ -10,12 +10,17 @@
except pages.NotFound:
raise Http404
+ redirect_page = page.redirect_page(request)
+
+ if redirect_page:
+ return redirect('page', redirect_page)
+
return render(request, 'pages/page.html', dict(
site_name = page.tree.site.name,
page_name = page.name,
page_title = page.title,
page_breadcrumb = page.breadcrumb(),
page_hierarchy = list(page.hierarchy()),
- page_html = page.render(request),
+ page_html = page.render_html(request),
page_modified = page.modified(),
))