Author: david.michon
Date: Thu Apr 2 02:46:50 2009
New Revision: 430
Modified:
trunk/pages/admin/__init__.py
trunk/pages/admin/widgets.py
trunk/pages/models.py
trunk/pages/settings.py
trunk/pages/utils.py
trunk/pages/views.py
Log:
Add redirect_to on page model. Now we can define a redirection when a user
click on a page. It can be useful to have a menu page to fallback to
another.
Add handling for tinyMCE widget slightly differently by using the
django-tinymce project. A new settings "PAGE_TINYMCE" can be enabled to use
it. Note that django-tinymce handle django-filebrowser easily.
Modified: trunk/pages/admin/__init__.py
==============================================================================
--- trunk/pages/admin/__init__.py (original)
+++ trunk/pages/admin/__init__.py Thu Apr 2 02:46:50 2009
@@ -48,7 +48,7 @@
normal_fields = ['language']
if settings.PAGE_TEMPLATES:
normal_fields.append('template')
-
+ normal_fields.append('redirect_to')
fieldsets = (
(_('General'), {
'fields': general_fields,
Modified: trunk/pages/admin/widgets.py
==============================================================================
--- trunk/pages/admin/widgets.py (original)
+++ trunk/pages/admin/widgets.py Thu Apr 2 02:46:50 2009
@@ -5,8 +5,7 @@
from django.utils.safestring import mark_safe
from django.template import RequestContext
from django.template.loader import render_to_string
-
-from pages.settings import PAGES_MEDIA_URL, PAGE_TAGGING
+from pages.settings import PAGES_MEDIA_URL, PAGE_TAGGING, PAGE_TINYMCE
from pages.models import Page
if PAGE_TAGGING:
@@ -56,29 +55,21 @@
return rendered + mark_safe(render_to_string(
'admin/pages/page/widgets/richtextarea.html', context))
-class TinyMCE(Textarea):
-
- class Media:
- js = [join(PAGES_MEDIA_URL, path) for path in (
- 'tiny_mce/tiny_mce.js',
- )]
-
- def __init__(self, language=None, attrs=None):
- self.language = language or settings.LANGUAGE_CODE[:2]
- self.attrs = {'class': 'tinymce'}
- if attrs:
- self.attrs.update(attrs)
- super(TinyMCE, self).__init__(attrs)
-
- def render(self, name, value, attrs=None):
- rendered = super(TinyMCE, self).render(name, value, attrs)
- context = {
- 'name': name,
- 'language': self.language,
- 'PAGES_MEDIA_URL': PAGES_MEDIA_URL,
- }
- return rendered + mark_safe(render_to_string(
- 'admin/pages/page/widgets/tinymce.html', context))
+if PAGE_TINYMCE:
+ from tinymce import widgets as tinymce_widgets
+
+ class TinyMCE(tinymce_widgets.TinyMCE):
+ def __init__(self, content_language=None, attrs=None,
mce_attrs={}):
+ self.mce_attrs = mce_attrs
+ self.mce_attrs.update({
+ 'mode': "exact",
+ 'theme': "advanced",
+ 'width': 640,
+ 'height': 400,
+ 'theme_advanced_toolbar_location': "top",
+ 'theme_advanced_toolbar_align': "left"
+ })
+ super(TinyMCE, self).__init__(content_language, attrs,
mce_attrs)
class WYMEditor(Textarea):
Modified: trunk/pages/models.py
==============================================================================
--- trunk/pages/models.py (original)
+++ trunk/pages/models.py Thu Apr 2 02:46:50 2009
@@ -55,7 +55,9 @@
# Disable could make site tests fail
sites = models.ManyToManyField(Site, default=[settings.SITE_ID],
help_text=_('The site(s) the page is accessible at.'),
verbose_name=_('sites'))
-
+
+ redirect_to = models.ForeignKey('self', null=True, blank=True,
related_name='redirected_pages')
+
# Managers
objects = PageManager()
Modified: trunk/pages/settings.py
==============================================================================
--- trunk/pages/settings.py (original)
+++ trunk/pages/settings.py Thu Apr 2 02:46:50 2009
@@ -26,6 +26,11 @@
if PAGE_TAGGING and "tagging" not in getattr(settings, 'INSTALLED_APPS',
[]):
raise ImproperlyConfigured("django-tagging could not be found.\nPlease
make sure you've installed it correctly or disable the tagging feature by
setting PAGE_TAGGING to False.")
+# Whether to enable tinymce.
+PAGE_TINYMCE = getattr(settings, 'PAGE_TINYMCE', False)
+if PAGE_TINYMCE and "tinymce" not in getattr(settings, 'INSTALLED_APPS',
[]):
+ raise ImproperlyConfigured("django-tinymce could not be found.\nPlease
make sure you've installed it correctly or disable the tinymce feature by
setting PAGE_TINYMCE to False.")
+
# Whether to only allow unique slugs.
PAGE_UNIQUE_SLUG_REQUIRED = getattr(settings, 'PAGE_UNIQUE_SLUG_REQUIRED',
False)
Modified: trunk/pages/utils.py
==============================================================================
--- trunk/pages/utils.py (original)
+++ trunk/pages/utils.py Thu Apr 2 02:46:50 2009
@@ -5,10 +5,11 @@
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.db.models import signals
-from django.http import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect,
HttpResponsePermanentRedirect
from django.core.handlers.wsgi import WSGIRequest
from django.contrib.sites.models import Site, RequestSite, SITE_CACHE
from pages import settings
+from exceptions import Exception as Except
def get_placeholders(template_name):
"""
@@ -66,7 +67,7 @@
# return only context dictionary
del(kwargs['only_context'])
response = func(request, *args, **kwargs)
- if isinstance(response, HttpResponse) or isinstance(response,
HttpResponseRedirect):
+ if isinstance(response, HttpResponse) or isinstance(response,
HttpResponseRedirect) or isinstance(response,
HttpResponsePermanentRedirect):
raise Except("cannot return context dictionary because a
HttpResponseRedirect as been found")
(template_name, context) = response
return context
@@ -74,14 +75,19 @@
t = kwargs['template_name']
del kwargs['template_name']
response = func(request, *args, **kwargs)
- if isinstance(response, HttpResponse) or isinstance(response,
HttpResponseRedirect):
+ if isinstance(response, HttpResponse) or isinstance(response,
HttpResponseRedirect) or isinstance(response,
HttpResponsePermanentRedirect):
return response
+
+ if response[1].get('http_redirect', False):
+ return response[1].get('http_redirect')
+
(template_name, context) = response
if not t:
t = template_name
context['template_name'] = t
return render_to_response(t, context,
context_instance=RequestContext(request))
return _dec
+
def get_template_from_request(request, obj=None):
"""
Modified: trunk/pages/views.py
==============================================================================
--- trunk/pages/views.py (original)
+++ trunk/pages/views.py Thu Apr 2 02:46:50 2009
@@ -1,11 +1,12 @@
# -*- coding: utf-8 -*-
-from django.http import Http404
+from django.http import Http404, HttpResponsePermanentRedirect
from django.shortcuts import get_object_or_404
from django.contrib.sites.models import SITE_CACHE
from pages import settings
from pages.models import Page, Content
from pages.utils import auto_render, get_language_from_request,
get_page_from_slug
+
def details(request, slug=None, lang=None):
"""
Example view that get the root pages for navigation,
@@ -26,10 +27,13 @@
if not current_page.calculated_status in (Page.PUBLISHED, Page.HIDDEN):
raise Http404
-
+
if not lang:
lang = get_language_from_request(request, current_page)
-
+
+ if current_page.redirect_to:
+ http_redirect =
HttpResponsePermanentRedirect(current_page.redirect_to.get_absolute_url(lang))
+
template_name = current_page.get_template()
return template_name, locals()
details = auto_render(details)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---