Merge pull request #269 from tomchristie/fix_breadcrumbs

Use get_script_prefix to play nicely if not installed at the root.
This commit is contained in:
Tom Christie 2012-09-20 04:34:29 -07:00
commit 79df8eba2f

View File

@ -1,4 +1,4 @@
from django.core.urlresolvers import resolve from django.core.urlresolvers import resolve, get_script_prefix
def get_breadcrumbs(url): def get_breadcrumbs(url):
@ -6,7 +6,7 @@ def get_breadcrumbs(url):
from djangorestframework.views import APIView from djangorestframework.views import APIView
def breadcrumbs_recursive(url, breadcrumbs_list): def breadcrumbs_recursive(url, breadcrumbs_list, prefix):
"""Add tuples of (name, url) to the breadcrumbs list, progressively chomping off parts of the url.""" """Add tuples of (name, url) to the breadcrumbs list, progressively chomping off parts of the url."""
try: try:
@ -16,7 +16,7 @@ def get_breadcrumbs(url):
else: else:
# Check if this is a REST framework view, and if so add it to the breadcrumbs # Check if this is a REST framework view, and if so add it to the breadcrumbs
if isinstance(getattr(view, 'cls_instance', None), APIView): if isinstance(getattr(view, 'cls_instance', None), APIView):
breadcrumbs_list.insert(0, (view.cls_instance.get_name(), url)) breadcrumbs_list.insert(0, (view.cls_instance.get_name(), prefix + url))
if url == '': if url == '':
# All done # All done
@ -24,9 +24,11 @@ def get_breadcrumbs(url):
elif url.endswith('/'): elif url.endswith('/'):
# Drop trailing slash off the end and continue to try to resolve more breadcrumbs # Drop trailing slash off the end and continue to try to resolve more breadcrumbs
return breadcrumbs_recursive(url.rstrip('/'), breadcrumbs_list) return breadcrumbs_recursive(url.rstrip('/'), breadcrumbs_list, prefix)
# Drop trailing non-slash off the end and continue to try to resolve more breadcrumbs # Drop trailing non-slash off the end and continue to try to resolve more breadcrumbs
return breadcrumbs_recursive(url[:url.rfind('/') + 1], breadcrumbs_list) return breadcrumbs_recursive(url[:url.rfind('/') + 1], breadcrumbs_list, prefix)
return breadcrumbs_recursive(url, []) prefix = get_script_prefix().rstrip('/')
url = url[len(prefix):]
return breadcrumbs_recursive(url, [], prefix)