Author: batiste.bieler
Date: Wed Jul 8 04:14:44 2009
New Revision: 597
Modified:
trunk/pages/http.py
trunk/pages/managers.py
trunk/pages/templatetags/pages_tags.py
trunk/pages/tests/pages_tests.py
trunk/pages/utils.py
trunk/pages/views.py
Log:
Fix issue 123
Modified: trunk/pages/http.py
==============================================================================
--- trunk/pages/http.py (original)
+++ trunk/pages/http.py Wed Jul 8 04:14:44 2009
@@ -69,24 +69,12 @@
def get_language_from_request(request, current_page=None):
"""Return the most obvious language according the request."""
- # first try the GET parameter
language = request.GET.get('language', None)
if language:
return language
if hasattr(request, 'LANGUAGE_CODE'):
- client_language = \
- settings.PAGE_LANGUAGE_MAPPING(str(request.LANGUAGE_CODE))
+ return settings.PAGE_LANGUAGE_MAPPING(str(request.LANGUAGE_CODE))
else:
- client_language = settings.PAGE_DEFAULT_LANGUAGE
+ return settings.PAGE_DEFAULT_LANGUAGE
- # then try to get the right one for the page
- if current_page:
- # try to get the language that match the client language
- languages = current_page.get_languages()
- for lang in languages:
- if client_language == str(lang):
- return client_language
-
- # last resort
- return settings.PAGE_DEFAULT_LANGUAGE
\ No newline at end of file
Modified: trunk/pages/managers.py
==============================================================================
--- trunk/pages/managers.py (original)
+++ trunk/pages/managers.py Wed Jul 8 04:14:44 2009
@@ -18,6 +18,8 @@
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
class PageManager(models.Manager):
@@ -85,6 +87,27 @@
def expired(self):
return self.on_site().filter(
publication_end_date__lte=datetime.now())
+
+ def from_slug(self, slug, complete_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):]
+ page_ids = Content.objects.get_page_ids_by_slug(slug)
+ pages_list = self.filter(id__in=page_ids)
+ if exclude_drafts:
+ pages_list = pages_list.exclude(status=Page.DRAFT)
+ current_page = None
+ if len(pages_list) == 1:
+ return pages_list[0]
+ # 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:
+ return page
+ return None
class ContentManager(models.Manager):
"""Content manager methods"""
Modified: trunk/pages/templatetags/pages_tags.py
==============================================================================
--- trunk/pages/templatetags/pages_tags.py (original)
+++ trunk/pages/templatetags/pages_tags.py Wed Jul 8 04:14:44 2009
@@ -9,7 +9,6 @@
from pages import settings
from pages.models import Content, Page
-from pages.utils import get_page_from_slug
from pages.http import get_language_from_request
register = template.Library()
@@ -30,7 +29,8 @@
# 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, context['request'], absolute_lang)
+ page = Page.objects.from_slug(page, context['request'].path,
+ absolute_lang)
if not page:
return ''
@@ -40,7 +40,8 @@
if not absolute_lang:
absolute_lang = get_language_from_request(context['request'], page)
- c = Content.objects.get_content(page, absolute_lang, content_type,
fallback)
+ c = Content.objects.get_content(page, absolute_lang, content_type,
+fallback)
return c
"""Filters"""
@@ -89,7 +90,8 @@
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
@@ -99,7 +101,8 @@
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):
@@ -117,7 +120,8 @@
lang -- the wanted language (default None, use the request object to
know)
fallback -- use fallback content
"""
- return {'content':get_content(context, page, content_type, lang,
fallback)}
+ return {'content':get_content(context, page, content_type, lang,
+fallback)}
show_content = register.inclusion_tag('pages/content.html',
takes_context=True)(show_content)
@@ -135,16 +139,18 @@
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:
+ if not request:
return {'content':''}
if lang is None:
if 'lang' in context:
lang = context['lang']
else:
- lang = get_language_from_request(context['request'], page)
+ lang = get_language_from_request(request, page)
+ # 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)
+ if not page:
+ return {'content':''}
url = page.get_absolute_url(language=lang)
if url:
return {'content':url}
Modified: trunk/pages/tests/pages_tests.py
==============================================================================
--- trunk/pages/tests/pages_tests.py (original)
+++ trunk/pages/tests/pages_tests.py Wed Jul 8 04:14:44 2009
@@ -32,7 +32,7 @@
def test_02_create_page(self):
"""Test that a page can be created via the admin."""
- setattr(settings, "SITE_ID", 2)
+ #setattr(settings, "SITE_ID", 2)
c = Client()
c.login(username= 'batiste', password='b')
page_data = self.get_new_page_data()
@@ -215,7 +215,7 @@
response = c.post('/admin/pages/page/%d/' % page.id, page_data)
self.assertRedirects(response, '/admin/pages/page/')
- setattr(settings, "PAGE_DEFAULT_LANGUAGE", 'en-us')
+ #setattr(settings, "PAGE_DEFAULT_LANGUAGE", 'en-us')
# test that the frontend view use the good parameters
# I cannot find a way of setting the accept-language HTTP
Modified: trunk/pages/utils.py
==============================================================================
--- trunk/pages/utils.py (original)
+++ trunk/pages/utils.py Wed Jul 8 04:14:44 2009
@@ -85,24 +85,3 @@
if permission == "All":
return True
return False
-
-# TODO: move this in the manager
-def get_page_from_slug(slug, request, lang=None):
- """Get the page according to a slug."""
- from pages.models import Content, Page
- from django.core.urlresolvers import reverse
- lang = get_language_from_request(request)
- relative_url = request.path
- root = reverse('pages-root')
- if request.path.startswith(root):
- relative_url = relative_url[len(root):]
- page_ids = Content.objects.get_page_ids_by_slug(slug)
- pages_list = Page.objects.filter(id__in=page_ids)
- current_page = None
- if len(pages_list) == 1:
- return pages_list[0]
- if len(pages_list) > 1:
- for page in pages_list:
- if page.get_url(lang) == relative_url:
- return page
- return None
Modified: trunk/pages/views.py
==============================================================================
--- trunk/pages/views.py (original)
+++ trunk/pages/views.py Wed Jul 8 04:14:44 2009
@@ -6,10 +6,9 @@
from pages import settings
from pages.models import Page, Content
from pages.http import auto_render, get_language_from_request
-from pages.utils import get_page_from_slug
-def details(request, slug=None, lang=None, ajax=False):
+def details(request, slug=None, lang=None):
"""This view get the root pages for navigation
and the current page to display if there is any.
@@ -26,11 +25,14 @@
This can be usefull if you want to write your own
view. You can reuse the following code without having to
copy and paste it."""
+
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 = get_page_from_slug(slug, request, lang)
+ current_page = Page.objects.from_slug(slug, request.path, lang)
if current_page and request.META['PATH_INFO'] != \
current_page.get_absolute_url():
raise Http404
@@ -44,16 +46,13 @@
current_page.calculated_status in (Page.DRAFT, Page.EXPIRED):
raise Http404
- if not lang:
- lang = get_language_from_request(request, current_page)
-
if current_page.redirect_to:
return HttpResponsePermanentRedirect(
current_page.redirect_to.get_absolute_url(lang))
template_name = current_page.get_template()
- if ajax:
+ if request.is_ajax():
new_template_name = "body_%s" % template_name
return new_template_name, locals()
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---