Merge git://github.com/derega/philo into develop. Merged derega's nav example changes...
authorStephen Burrows <stephen.r.burrows@gmail.com>
Mon, 27 Jun 2011 20:42:53 +0000 (16:42 -0400)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Mon, 27 Jun 2011 20:42:53 +0000 (16:42 -0400)
Conflicts:
docs/tutorials/shipherd.rst

1  2 
docs/tutorials/shipherd.rst
philo/contrib/shipherd/templatetags/shipherd.py

@@@ -3,21 -3,7 +3,21 @@@ Using Shipherd in the Admi
  
  The navigation mechanism is fairly complex; unfortunately, there's no real way around that - without a lot of equally complex code that you are quite welcome to write and contribute! ;-)
  
 -For this guide, we'll assume that you have the setup described in :doc:`getting-started`. We'll be adding a main :class:`.Navigation` to the root :class:`.Node` and making it display as part of the :class:`.Template`. Before getting started, make sure that you've added :mod:`philo.contrib.shipherd` to your :setting:`INSTALLED_APPS` and :mod:`django.core.context_processors.request` to TEMPLATE_CONTEXT_PROCESSORS.
 +For this guide, we'll assume that you have the setup described in :doc:`getting-started`. We'll be adding a main :class:`.Navigation` to the root :class:`.Node` and making it display as part of the :class:`.Template`.
 +
 +Before getting started, make sure that you've added :mod:`philo.contrib.shipherd` to your :setting:`INSTALLED_APPS`. :mod:`~philo.contrib.shipherd` template tags also require the request context processor, so make sure to set :setting:`TEMPLATE_CONTEXT_PROCESSORS` appropriately::
 +
 +      TEMPLATE_CONTEXT_PROCESSORS = (
 +              # Defaults
 +              "django.contrib.auth.context_processors.auth",
 +              "django.core.context_processors.debug",
 +              "django.core.context_processors.i18n",
 +              "django.core.context_processors.media",
 +              "django.core.context_processors.static",
 +              "django.contrib.messages.context_processors.messages"
 +              ...
 +              "django.core.context_processors.request"
 +      )
  
  Creating the Navigation
  +++++++++++++++++++++++
@@@ -33,7 -19,7 +33,7 @@@ Displaying the Navigatio
  
  All you need to do now is show the navigation in the template! This is quite easy, using the :ttag:`~philo.contrib.shipherd.templatetags.shipherd.recursenavigation` templatetag. For now we'll keep it simple. Adjust the "Hello World Template" to look like this::
        
 -      <html>
 +      <html>{% load shipherd %}
            <head>
                <title>{% container page_title %}</title>
            </head>
@@@ -41,7 -27,7 +41,7 @@@
                <ul>
                    {% recursenavigation node "main" %}
                        <li{% if navloop.active %} class="active"{% endif %}>
-                           {{ item.text }}
+                           <a href="{{ item.get_target_url }}">{{ item.text }}</a>
                        </li>
                    {% endrecursenavigation %}
                </ul>
@@@ -131,7 -131,7 +131,7 @@@ def recursenavigation(parser, token)
                <ul>
                    {% recursenavigation node "main" %}
                        <li{% if navloop.active %} class='active'{% endif %}>
--                          {{ item.text }}
++                          <a href="{{ item.get_target_url }}">{{ item.text }}</a>
                            {% if item.get_children %}
                                <ul>
                                    {{ children }}
                        </li>
                    {% endrecursenavigation %}
                </ul>
 +      
 +      .. note:: {% recursenavigation %} requires that the current :class:`HttpRequest` be present in the context as ``request``. The simplest way to do this is with the `request context processor`_. Simply make sure that ``django.core.context_processors.request`` is included in your :setting:`TEMPLATE_CONTEXT_PROCESSORS` setting.
 +      
 +      .. _request context processor: https://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-request
 +      
        """
        bits = token.contents.split()
        if len(bits) != 3:
  def has_navigation(node, key=None):
        """Returns ``True`` if the node has a :class:`.Navigation` with the given key and ``False`` otherwise. If ``key`` is ``None``, returns whether the node has any :class:`.Navigation`\ s at all."""
        try:
 -              nav = node.navigation
 -              if key is not None:
 -                      if key in nav and bool(node.navigation[key]):
 -                              return True
 -                      elif key not in node.navigation:
 -                              return False
 -              return bool(node.navigation)
 +              return bool(node.navigation[key])
        except:
                return False
  
  def navigation_host(node, key):
        """Returns the :class:`.Node` which hosts the :class:`.Navigation` which ``node`` has inherited for ``key``. Returns ``node`` if any exceptions are encountered."""
        try:
 -              return Navigation.objects.filter(node__in=node.get_ancestors(include_self=True), key=key).order_by('-node__level')[0].node
 +              return node.navigation[key].node
        except:
                return node