Author: batiste.bieler
Date: Wed Mar 25 06:14:20 2009
New Revision: 410
Modified:
trunk/pages/templatetags/pages_tags.py
trunk/pages/tests.py
Log:
Apply the patch for the get content tag: issue 70 fixed
Modified: trunk/pages/templatetags/pages_tags.py
==============================================================================
--- trunk/pages/templatetags/pages_tags.py (original)
+++ trunk/pages/templatetags/pages_tags.py Wed Mar 25 06:14:20 2009
@@ -59,6 +59,28 @@
return page.has_page_permission(request)
register.filter(has_permission)
+def get_content(context, page, content_type, lang):
+ 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, True)
+ if c:
+ return c
+ return ''
+
def show_content(context, page, content_type, lang=None):
"""Display a content type from a page.
@@ -73,29 +95,58 @@
args -- content_type used by a placeholder
lang -- the wanted language (default None, use the request object to
know)
"""
+ return {'content':get_content(context, page, content_type, lang)}
+show_content = register.inclusion_tag('pages/content.html',
+ takes_context=True)(show_content)
- request = context.get('request', False)
- if not request or not page:
- return {'content':''}
- # if the page is a SafeUnicode, try to use it like a slug
- if isinstance(page, SafeUnicode):
- c = Content.objects.filter(type='slug', body=page)
- if len(c):
- page = c[0].page
+class GetContentNode(template.Node):
+ def __init__(self, page, content_type, varname, lang):
+ self.page = page
+ self.content_type = content_type
+ self.varname = varname
+ self.lang = lang
+ def render(self, context):
+ if self.lang is None:
+ lang = None
else:
- return {'content':''}
+ lang = self.lang.resolve(context)
+ context[self.varname] = get_content(context,
+ self.page.resolve(context),
+ self.content_type.resolve(context),
+ lang)
+ return ''
- if lang is None:
- if 'lang' in context:
- lang = context['lang']
- else:
- lang = get_language_from_request(context['request'], page)
- c = Content.objects.get_content(page, lang, content_type, True)
- if c:
- return {'content':c}
- return {'content':''}
-show_content = register.inclusion_tag('pages/content.html',
- takes_context=True)(show_content)
+def do_get_content(parser, token):
+ """Store a content type from a page into a context variable.
+
+ eg: {% get_content page_object "title" as content %}
+
+ You can also use the slug of a page
+
+ eg: {% get_content "my-page-slug" "title" as content %}
+
+ Syntax: {% get_content page type [lang] as name %}
+ Arguments:
+ page -- the page object
+ type -- content_type used by a placeholder
+ name -- name of the context variable to store the content in
+ lang -- the wanted language (default None, use the request object to
know)
+ """
+ bits = token.split_contents()
+ if not 5 <= len(bits) <= 6:
+ raise TemplateSyntaxError('%r expects 4 or 5 arguments' % bits[0])
+ if bits[-2] != 'as':
+ raise TemplateSyntaxError(
+ '%r expects "as" as the second last argument' % bits[0])
+ page = parser.compile_filter(bits[1])
+ content_type = parser.compile_filter(bits[2])
+ varname = bits[-1]
+ lang = None
+ if len(bits) == 6:
+ 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
Modified: trunk/pages/tests.py
==============================================================================
--- trunk/pages/tests.py (original)
+++ trunk/pages/tests.py Wed Mar 25 06:14:20 2009
@@ -4,7 +4,7 @@
import settings
from pages.models import *
from django.test.client import Client
-from django.template import TemplateDoesNotExist
+from django.template import Template, RequestContext, TemplateDoesNotExist
class PagesTestCase(TestCase):
fixtures = ['tests.json']
@@ -327,3 +327,45 @@
response = c.get('/pages/same-slug/same-slug/')
self.assertContains(response, "children title", 2)
+
+ def test_11_show_content_tag(self):
+ """
+ Test the {% show_content %} template tag
+ """
+ c = Client()
+ c.login(username= 'batiste', password='b')
+ page_data = self.get_new_page_data()
+ response = c.post('/admin/pages/page/add/', page_data)
+ page = Page.objects.all()[0]
+ class request:
+ REQUEST = {'language': 'en'}
+ GET = {}
+ context = RequestContext(request, {'page': page})
+ template = Template('{% load pages_tags %}'
+ '{% show_content page "title" "en-us" %}')
+ self.assertEqual(template.render(context), page_data['title']
+ '\n')
+ template = Template('{% load pages_tags %}'
+ '{% show_content page "title" %}')
+ self.assertEqual(template.render(context), page_data['title']
+ '\n')
+
+ def test_12_get_content_tag(self):
+ """
+ Test the {% get_content %} template tag
+ """
+ c = Client()
+ c.login(username= 'batiste', password='b')
+ page_data = self.get_new_page_data()
+ response = c.post('/admin/pages/page/add/', page_data)
+ page = Page.objects.all()[0]
+ class request:
+ REQUEST = {'language': 'en'}
+ GET = {}
+ context = RequestContext(request, {'page': page})
+ template = Template('{% load pages_tags %}'
+ '{% get_content page "title" "en-us" as
content %}'
+ '{{ content }}')
+ self.assertEqual(template.render(context), page_data['title'])
+ template = Template('{% load pages_tags %}'
+ '{% get_content page "title" as content %}'
+ '{{ content }}')
+ self.assertEqual(template.render(context), page_data['title'])
\ No newline at end of file
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---