Author: batiste.bieler
Date: Sun May 10 06:58:24 2009
New Revision: 520

Modified:
    trunk/pages/templatetags/pages_tags.py

Log:
Code cleaning in template tags and add a load_pages tag

Modified: trunk/pages/templatetags/pages_tags.py
==============================================================================
--- trunk/pages/templatetags/pages_tags.py      (original)
+++ trunk/pages/templatetags/pages_tags.py      Sun May 10 06:58:24 2009
@@ -14,6 +14,44 @@

  PLACEHOLDER_ERROR = _("[Placeholder %(name)s had syntax error: %(error)s]")

+def get_content(context, page, content_type, lang, fallback=True):
+    """Helper function used by placeholder nodes"""
+    request = context.get('request', False)
+    if not request or not page:
+        return ''
+    if lang is None:
+        if 'lang' in context:
+            lang = context['lang']
+        else:
+            lang = get_language_from_request(context['request'], page)
+
+    # if the page is a SafeUnicode, try to use it like a slug
+    if isinstance(page, SafeUnicode):
+        c = Content.objects.filter(type='slug', lang=lang, body=page)
+        if len(c):
+            page = c[0].page
+        else:
+            ''
+    c = Content.objects.get_content(page, lang, content_type, fallback)
+    if c:
+        return c
+    return ''
+
+"""Fitlers"""
+
+def has_content_in(page, language):
+    """Tell if the page has any content in a particular language"""
+    return Content.objects.filter(page=page, language=language).count() > 0
+register.filter(has_content_in)
+
+def has_permission(page, request):
+    """Tell if a user has permissions on the page according to the request
+       object"""
+    return page.has_page_permission(request)
+register.filter(has_permission)
+
+"""Inclusion tags"""
+
  def pages_menu(context, page, url='/'):
      """render a nested list of all children of the pages"""
      request = context['request']
@@ -55,33 +93,6 @@
  pages_admin_menu = register.inclusion_tag('admin/pages/page/menu.html',
                                             
takes_context=True)(pages_admin_menu)

-def has_permission(page, request):
-    return page.has_page_permission(request)
-register.filter(has_permission)
-
-
-
-def get_content(context, page, content_type, lang, fallback=True):
-    request = context.get('request', False)
-    if not request or not page:
-        return ''
-    if lang is None:
-        if 'lang' in context:
-            lang = context['lang']
-        else:
-            lang = get_language_from_request(context['request'], page)
-
-    # if the page is a SafeUnicode, try to use it like a slug
-    if isinstance(page, SafeUnicode):
-        c = Content.objects.filter(type='slug', lang=lang, body=page)
-        if len(c):
-            page = c[0].page
-        else:
-            ''
-    c = Content.objects.get_content(page, lang, content_type, fallback)
-    if c:
-        return c
-    return ''

  def show_content(context, page, content_type, lang=None, fallback=True):
      """Display a content type from a page.
@@ -102,6 +113,52 @@
  show_content = register.inclusion_tag('pages/content.html',
                                        takes_context=True)(show_content)

+def show_absolute_url(context, page, lang=None):
+    """Show the url of a page in the right language
+
+    eg: {% show_absolute_url page_object %}
+
+    You can also use the slug of a page
+
+    eg: {% show_absolute_url "my-page-slug" %}
+
+    Keyword arguments:
+    page -- the page object or a slug string
+    lang -- the wanted language (defaults to None, uses request object  
else)
+    """
+    request = context.get('request', False)
+    # if the page is a SafeUnicode, try to use it like a slug
+    if isinstance(page, SafeUnicode) or isinstance(page, unicode):
+        page = get_page_from_slug(page, request)
+    if not request or not page:
+        return {'content':''}
+    if lang is None:
+        if 'lang' in context:
+            lang = context['lang']
+        else:
+            lang = get_language_from_request(context['request'], page)
+    url = page.get_absolute_url(language=lang)
+    if url:
+        return {'content':url}
+    return {'content':''}
+show_absolute_url = register.inclusion_tag('pages/content.html',
+                                       
takes_context=True)(show_absolute_url)
+
+def show_revisions(context, page, content_type, lang=None):
+    """Render the last 10 revisions of a page content with a list using
+        the pages/revisions.html template"""
+    if not settings.PAGE_CONTENT_REVISION:
+        return {'revisions':None}
+    revisions = Content.objects.filter(page=page, language=lang,
+                                 
type=content_type).order_by('-creation_date')
+    if len(revisions) < 2:
+        return {'revisions':None}
+    return {'revisions':revisions[0:10]}
+show_revisions = register.inclusion_tag('pages/revisions.html',
+                                        takes_context=True)(show_revisions)
+
+"""Tags"""
+
  class GetContentNode(template.Node):
      def __init__(self, page, content_type, varname, lang):
          self.page = page
@@ -149,80 +206,29 @@
          lang = parser.compile_filter(bits[3])
      return GetContentNode(page, content_type, varname, lang)
  do_get_content = register.tag('get_content', do_get_content)
-


-def show_absolute_url(context, page, lang=None):
-    """Show the url of a page in the right language
-
-    eg: {% show_absolute_url page_object %}
-
-    You can also use the slug of a page
-
-    eg: {% show_absolute_url "my-page-slug" %}
-
-    Keyword arguments:
-    page -- the page object or a slug string
-    lang -- the wanted language (defaults to None, uses request object  
else)
-    """
-    request = context.get('request', False)
-    # if the page is a SafeUnicode, try to use it like a slug
-    if isinstance(page, SafeUnicode) or isinstance(page, unicode):
-        page = get_page_from_slug(page, request)
-    if not request or not page:
-        return {'content':''}
-    if lang is None:
-        if 'lang' in context:
-            lang = context['lang']
-        else:
-            lang = get_language_from_request(context['request'], page)
-    url = page.get_absolute_url(language=lang)
-    if url:
-        return {'content':url}
-    return {'content':''}
-show_absolute_url = register.inclusion_tag('pages/content.html',
-                                       
takes_context=True)(show_absolute_url)
-
-def show_revisions(context, page, content_type, lang=None):
-    """Render the last 10 revisions of a page content with a list"""
-    if not settings.PAGE_CONTENT_REVISION:
-        return {'revisions':None}
-    revisions = Content.objects.filter(page=page, language=lang,
-                                 
type=content_type).order_by('-creation_date')
-    if len(revisions) < 2:
-        return {'revisions':None}
-    return {'revisions':revisions[0:10]}
-show_revisions = register.inclusion_tag('pages/revisions.html',
-                                        takes_context=True)(show_revisions)
+class LoadPagesNode(template.Node):
+    def render(self, context):
+        if (not context.has_key('pages')):
+            context['pages'] = Page.objects.navigation()
+        return ''

+def do_load_pages(parser, token):
+    """Load the navigation pages into the current context

-def has_content_in(page,language):
-    return Content.objects.filter(page=page,language=language).count() > 0
-register.filter(has_content_in)
+    eg:
+    <ul>
+        {% load_pages %}
+        {% for page in pages %}
+            {% pages_menu page %}
+        {% endfor %}
+    </ul>

-def do_placeholder(parser, token):
      """
-    Syntax::
-
-        {% placeholder [name] %}
-        {% placeholder [name] parsed %}
-
-        {% placeholder [name] on [page]  %}
-        {% placeholder [name] with [widget] %}
-        {% placeholder [name] on [page] with [widget] %}
+    return LoadPagesNode()
+do_load_pages = register.tag('load_pages', do_load_pages)

-        {% placeholder [name] on [page] parsed %}
-        {% placeholder [name] with [widget] parsed %}
-        {% placeholder [name] on [page] with [widget] parsed %}
-
-    Example usage::
-
-        {% placeholder about %}
-        {% placeholder body with TextArea as body_text %}
-        {% placeholder welcome with TextArea parsed as welcome_text %}
-        {% placeholder teaser on next_page with TextArea parsed %}
-    """
-    return PlaceholderNode.handle_token(parser, token)

  class PlaceholderNode(template.Node):
      """This template node is used to output page content and
@@ -371,5 +377,29 @@

      def __repr__(self):
          return "<Placeholder Node: %s>" % self.name
+
+def do_placeholder(parser, token):
+    """
+    Syntax::
+
+        {% placeholder [name] %}
+        {% placeholder [name] parsed %}
+
+        {% placeholder [name] on [page]  %}
+        {% placeholder [name] with [widget] %}
+        {% placeholder [name] on [page] with [widget] %}
+
+        {% placeholder [name] on [page] parsed %}
+        {% placeholder [name] with [widget] parsed %}
+        {% placeholder [name] on [page] with [widget] parsed %}
+
+    Example usage::
+
+        {% placeholder about %}
+        {% placeholder body with TextArea as body_text %}
+        {% placeholder welcome with TextArea parsed as welcome_text %}
+        {% placeholder teaser on next_page with TextArea parsed %}
+    """
+    return PlaceholderNode.handle_token(parser, token)

  register.tag('placeholder', do_placeholder)

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to