Author: batiste.bieler
Date: Wed Jul  8 15:12:40 2009
New Revision: 598

Modified:
    trunk/example/templates/pages/index.html
    trunk/pages/admin/__init__.py
    trunk/pages/http.py
    trunk/pages/managers.py
    trunk/pages/models.py
    trunk/pages/templates/admin/pages/page/menu.html
    trunk/pages/templatetags/pages_tags.py
    trunk/pages/tests/pages_tests.py
    trunk/pages/urls.py
    trunk/pages/views.py

Log:
Big refactoring in order to enable the lang parameter at the basis of the  
URL

Modified: trunk/example/templates/pages/index.html
==============================================================================
--- trunk/example/templates/pages/index.html    (original)
+++ trunk/example/templates/pages/index.html    Wed Jul  8 15:12:40 2009
@@ -6,7 +6,7 @@
      {% show_content current_page "title" %}
  {% endif %}
  </title>
-<script type="text/javascript"  
src="http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js"; /></script>
+<!--<script type="text/javascript"  
src="http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js";  
/></script>-->
  <style>
      .placeholder-editable {
          border:1px #bbb solid;

Modified: trunk/pages/admin/__init__.py
==============================================================================
--- trunk/pages/admin/__init__.py       (original)
+++ trunk/pages/admin/__init__.py       Wed Jul  8 15:12:40 2009
@@ -15,11 +15,10 @@

  from pages import settings
  from pages.models import Page, Content
-from pages.utils import has_page_add_permission
+from pages.utils import has_page_add_permission, get_placeholders
  from pages.http import get_language_from_request, get_template_from_request

  from pages.admin import widgets
-from pages.utils import get_placeholders
  from pages.admin.forms import PageForm
  from pages.admin.utils import get_connected_models
  from pages.admin.views import traduction, get_content, sub_menu,  
change_status, modify_content
@@ -351,7 +350,9 @@
          # HACK: overrides the changelist template and later resets it to  
None
          if template_name:
              self.change_list_template = template_name
+        lang = get_language_from_request(request)
          context = {
+            'lang': lang,
              'name': _("page"),
              'pages': Page.objects.root().order_by("tree_id"),
              'opts': self.model._meta

Modified: trunk/pages/http.py
==============================================================================
--- trunk/pages/http.py (original)
+++ trunk/pages/http.py Wed Jul  8 15:12:40 2009
@@ -4,7 +4,17 @@
  from django.http import HttpResponse, HttpResponseRedirect
  from django.shortcuts import render_to_response
  from django.template import loader, Context, RequestContext
+from django.core.urlresolvers import reverse
  from pages import settings
+
+def get_slug_and_relative_path(path):
+    if path[-1] == '/':
+        path = path[:-1]
+    slug = path.split("/")[-1]
+    root = reverse('pages-root')
+    if path.startswith(root):
+        path = path[len(root):]
+    return slug, path

  def get_request_mock():
      """Build a request mock that can be used for testing."""

Modified: trunk/pages/managers.py
==============================================================================
--- trunk/pages/managers.py     (original)
+++ trunk/pages/managers.py     Wed Jul  8 15:12:40 2009
@@ -18,7 +18,6 @@
  from django.contrib.sites.models import Site
  from django.db.models import Q
  from django.core.cache import cache
-from django.core.urlresolvers import reverse

  from pages import settings

@@ -88,13 +87,11 @@
          return self.on_site().filter(
              publication_end_date__lte=datetime.now())

-    def from_slug(self, slug, complete_path, lang, exclude_drafts=True):
+    def from_path(self, path, lang, exclude_drafts=True):
          """Get the page according to a slug."""
          from pages.models import Content, Page
-        relative_url = complete_path
-        root = reverse('pages-root')
-        if relative_url.startswith(root):
-            relative_url = relative_url[len(root):]
+        from pages.http import get_slug_and_relative_path
+        slug, rpath = get_slug_and_relative_path(path)
          page_ids = Content.objects.get_page_ids_by_slug(slug)
          pages_list = self.filter(id__in=page_ids)
          if exclude_drafts:
@@ -105,7 +102,7 @@
          # more than one page matching the slug, let's use the full url
          if len(pages_list) > 1:
              for page in pages_list:
-                if page.get_url(lang) == relative_url:
+                if page.get_url(lang) == path:
                      return page
          return None


Modified: trunk/pages/models.py
==============================================================================
--- trunk/pages/models.py       (original)
+++ trunk/pages/models.py       Wed Jul  8 15:12:40 2009
@@ -157,7 +157,8 @@
          return languages

      def get_absolute_url(self, language=None):
-        return reverse('pages-root') + self.get_url(language)
+        return reverse('pages-root') + str(language) + '/' \
+                + self.get_url(language)

      def get_url(self, language=None):
          """
@@ -172,7 +173,7 @@
              url = ancestor.slug(language) + u'/' + url

          cache.set(self.PAGE_URL_KEY % (self.id, language), url)
-
+
          return url

      def slug(self, language=None, fallback=True):
@@ -247,7 +248,7 @@
          if self.level:
              for n in range(0, self.level):
                  level += '&nbsp;&nbsp;&nbsp;'
-        return mark_safe(level + self.__unicode__())
+        return mark_safe(level + self.slug())

      def margin_level(self):
          return self.level * 2

Modified: trunk/pages/templates/admin/pages/page/menu.html
==============================================================================
--- trunk/pages/templates/admin/pages/page/menu.html    (original)
+++ trunk/pages/templates/admin/pages/page/menu.html    Wed Jul  8 15:12:40  
2009
@@ -13,9 +13,8 @@
                  {% endif %}
                  <a href="{{ url }}{{ page.id }}/" class="title  
changelink">{% show_content page "slug" %}</a>

-
                  <div class="actions">
-                    <a class="viewlink" href="{{ page.get_absolute_url }}"  
target="_blank" title="{% trans "view this page" %}"></a>
+                    <a class="viewlink" href="{% show_absolute_url  
page %}" target="_blank" title="{% trans "view this page" %}"></a>
                      <a class="movelink" id="move-link-{{ page.id }}"  
href="#" title="{% trans "move this page" %}"></a>
                      <a class="addlink" id="add-link-{{ page.id }}"  
href="#" title="{% trans "insert a new page here" %}"></a>
                      <a class="deletelink" href="{{ page.id }}/delete/"  
title="{% trans "delete this page" %}"></a>

Modified: trunk/pages/templatetags/pages_tags.py
==============================================================================
--- trunk/pages/templatetags/pages_tags.py      (original)
+++ trunk/pages/templatetags/pages_tags.py      Wed Jul  8 15:12:40 2009
@@ -17,31 +17,25 @@

  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:
+    if not page:
          return ''

-    absolute_lang = None
-    if lang:
-        absolute_lang = lang
-    elif 'lang' in context:
-        absolute_lang = context['lang']
-
+    if not lang and 'lang' in context:
+        lang = context['lang']
+
      # if the page is a SafeUnicode, try to use it like a slug
      if isinstance(page, SafeUnicode) or isinstance(page, unicode):
-        page = Page.objects.from_slug(page, context['request'].path,
-            absolute_lang)
+        page = Page.objects.from_path(page, lang)

      if not page:
          return ''

      # now that we are sure to have a page object, we can found the  
content's
      # language more accuratly
-    if not absolute_lang:
-        absolute_lang = get_language_from_request(context['request'], page)
+    """if not absolute_lang:
+        absolute_lang = get_language_from_request(context['lang'], page)"""

-    c = Content.objects.get_content(page, absolute_lang, content_type,
-fallback)
+    c = Content.objects.get_content(page, lang, content_type, fallback)
      return c

  """Filters"""
@@ -62,7 +56,8 @@
  def pages_menu(context, page, url='/'):
      """Render a nested list of all children of the given page, including
      this page"""
-    request = context['request']
+    lang = context['lang']
+    path = context['path']
      site_id = None
      children = page.get_children_for_frontend()
      if 'current_page' in context:
@@ -74,7 +69,8 @@
  def pages_sub_menu(context, page, url='/'):
      """Get the root page of the given page and
      render a nested list of all root's children pages"""
-    request = context['request']
+    lang = context['lang']
+    path = context['path']
      root = page.get_root()
      children = root.get_children_for_frontend()
      if 'current_page' in context:
@@ -90,19 +86,19 @@
      if "tree_expanded" in request.COOKIES:
          cookie_string = urllib.unquote(request.COOKIES['tree_expanded'])
          if cookie_string:
-            ids = [int(id) for id in
-urllib.unquote(request.COOKIES['tree_expanded']).split(',')]
+            ids = [int(id) for id in
+                 
urllib.unquote(request.COOKIES['tree_expanded']).split(',')]
              if page.id in ids:
                  expanded = True

      page_languages = settings.PAGE_LANGUAGES
      has_permission = page.has_page_permission(request)
      PAGES_MEDIA_URL = settings.PAGES_MEDIA_URL
+    lang = context.get('lang', None)

      return locals()
  pages_admin_menu = register.inclusion_tag('admin/pages/page/menu.html',
-
-takes_context=True)(pages_admin_menu)
+                                         
takes_context=True)(pages_admin_menu)


  def show_content(context, page, content_type, lang=None, fallback=True):
@@ -121,7 +117,7 @@
      fallback -- use fallback content
      """
      return {'content':get_content(context, page, content_type, lang,
-fallback)}
+                                                                fallback)}
  show_content = register.inclusion_tag('pages/content.html',
                                        takes_context=True)(show_content)

@@ -138,17 +134,11 @@
      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 not request:
-        return {'content':''}
-    if lang is None:
-        if 'lang' in context:
-            lang = context['lang']
-        else:
-            lang = get_language_from_request(request, page)
+    lang = context.get('lang', None)
+    path = context.get('path', None)
      # if the page is a SafeUnicode, try to use it like a slug
      if isinstance(page, SafeUnicode) or isinstance(page, unicode):
-        page = Page.objects.from_slug(page, request.path, lang)
+        page = Page.objects.from_path(page, lang)
      if not page:
          return {'content':''}
      url = page.get_absolute_url(language=lang)
@@ -205,7 +195,7 @@
      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)
+    lang -- the wanted language
      """
      bits = token.split_contents()
      if not 5 <= len(bits) <= 6:
@@ -300,14 +290,10 @@
          self.found_in_block = None

      def render(self, context):
-        if not 'request' in context or not self.page in context:
+        if not self.page in context:
              return ''

-        if 'lang' in context:
-            lang = context['lang']
-        else:
-            lang = get_language_from_request(context['request'],  
context[self.page])
-        request = context['request']
+        lang = context.get('lang', None)
          content = Content.objects.get_content(context[self.page], lang,
                                                self.name, True)
          if not content:

Modified: trunk/pages/tests/pages_tests.py
==============================================================================
--- trunk/pages/tests/pages_tests.py    (original)
+++ trunk/pages/tests/pages_tests.py    Wed Jul  8 15:12:40 2009
@@ -94,7 +94,7 @@
          response = c.post('/admin/pages/page/add/', page_data)
          self.assertRedirects(response, '/admin/pages/page/')

-        response = c.get('/pages/test-page-2/')
+        response = c.get('/pages/en-us/test-page-2/')
          self.assertEqual(response.status_code, 200)

      def test_05_edit_page(self):
@@ -305,7 +305,8 @@
          # this assert test that the creation fails as wanted
          self.assertEqual(response.status_code, 200)

-        response = c.get('/pages/same-slug/')
+        response = c.get('/pages/en-us/same-slug/')
+        self.assertEqual(response.status_code, 200)

          page1 =  
Content.objects.get_content_slug_by_slug(page_data['slug']).page
          self.assertEqual(page1.id, page.id)
@@ -317,10 +318,10 @@
          self.assertRedirects(response, '/admin/pages/page/')

          # finaly test that we can get every page according the path
-        response = c.get('/pages/same-slug/')
+        response = c.get('/pages/en-us/same-slug/')
          self.assertContains(response, "parent title", 2)

-        response = c.get('/pages/same-slug/same-slug/')
+        response = c.get('/pages/en-us/same-slug/same-slug/')
          self.assertContains(response, "children title", 2)

      def test_11_show_content_tag(self):
@@ -335,7 +336,8 @@
          class request:
              REQUEST = {'language': 'en'}
              GET = {}
-        context = RequestContext(request, {'page': page})
+        context = RequestContext(request, {'page': page, 'lang':'en-us',
+            'path':'/page-1/'})
          template = Template('{% load pages_tags %}'
                              '{% show_content page "title" "en-us" %}')
          self.assertEqual(template.render(context), page_data['title'])
@@ -568,11 +570,11 @@
          # create a page for the example otherwise you will get a Http404  
error
          response = c.post('/admin/pages/page/add/', page_data)

-        response = c.get('/pages/page1/')
+        response = c.get('/pages/en-us/page1/')
          self.assertEqual(response.status_code, 200)

          try:
-            response = c.get('/pages/toto/page1/')
+            response = c.get('/pages/en-us/toto/page1/')
          except TemplateDoesNotExist, e:
              if e.args != ('404.html',):
                  raise

Modified: trunk/pages/urls.py
==============================================================================
--- trunk/pages/urls.py (original)
+++ trunk/pages/urls.py Wed Jul  8 15:12:40 2009
@@ -9,9 +9,6 @@
  )

  urlpatterns += patterns('',
-    url(r'^.*?/?(?P<slug>[-\w]+)/ajax/$', details, {'ajax':True},  
name='pages-details-by-slug'),
-)
-
-urlpatterns += patterns('',
-    url(r'^.*?/?(?P<slug>[-\w]+)/$', details,  
name='pages-details-by-slug'),
+    url(r'^(?P<lang>[-\w]+)/(?P<path>.*)$', details,
+        name='pages-details-by-slug'),
  )

Modified: trunk/pages/views.py
==============================================================================
--- trunk/pages/views.py        (original)
+++ trunk/pages/views.py        Wed Jul  8 15:12:40 2009
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
  """Default example views"""
  from django.http import Http404, HttpResponsePermanentRedirect
  from django.shortcuts import get_object_or_404
@@ -6,9 +5,9 @@
  from pages import settings
  from pages.models import Page, Content
  from pages.http import auto_render, get_language_from_request
+from pages.http import get_slug_and_relative_path

-
-def details(request, slug=None, lang=None):
+def details(request, path=None, lang=None):
      """This view get the root pages for navigation
      and the current page to display if there is any.

@@ -28,13 +27,16 @@

      pages = Page.objects.navigation().order_by("tree_id")
      current_page = False
+
      if lang is None:
          lang = get_language_from_request(request, current_page)

-    if slug:
-        current_page = Page.objects.from_slug(slug, request.path, lang)
-        if current_page and request.META['PATH_INFO'] != \
-                                    current_page.get_absolute_url():
+    if lang not in [key for (key, value) in settings.PAGE_LANGUAGES]:
+        raise Http404
+
+    if path:
+        current_page = Page.objects.from_path(path, lang)
+        if not current_page:
              raise Http404
      elif pages:
          current_page = pages[0]
@@ -55,8 +57,9 @@
      if request.is_ajax():
          new_template_name = "body_%s" % template_name
          return new_template_name, locals()
-
+
      return template_name, {
+        'path': path,
          'pages': pages,
          'current_page': current_page,
          'lang': lang,

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