Menú y breadcrumbs

show_menu

El tag show_menu muestra la navegación de la página actual. Se pude adaptar el HTML si agrega una plantilla menu/menu. html a su proyecto o edita la que se proporciona con django CMS.

show_menu toma seis parámetros opcionales:

Ejemplos:

{% load menu_tags %}
<ul>
    {% show_menu 0 100 100 100 %}
</ul>
<ul>
    {% show_menu 0 100 0 100 %}
</ul>
<ul>
    {% show_menu 0 100 0 1 %}
</ul>
<ul>
    {% show_menu 1 %}
</ul>
{% show_menu 0 100 100 100 "myapp/menu.html" %}

Utilizaremos un sólo nivel de navegación para nuestro menú, así que añadimos {% show_menu 0 100 0 0 %} a nuestro base.html

show_breadcrumb

Muestra la miga de pan de la página actual. Podemos personalizar este html como queramos pasándole el html en el template tag.

Nosotros mostraremos la miga de pan obviando el nodo raíz (la home, el 0), nos quedaría de la siguiente manera:

{% show_breadcrumb 1 "inc/breadcrumbs_inc.html" %}

Cambios en plantilla base.html

Para crear el menú vamos a sacarlo a una template menu.html.

{% load menu_tags %}

<!-- Fixed navbar -->
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/">PyConES 2017</a>
    </div>
    <div class="navbar-collapse collapse navbar-right">
      <ul class="nav navbar-nav">
          {% show_menu 0 100 0 0 "inc/menu_inc.html" %}
      </ul>
    </div><!--/.nav-collapse -->
  </div>
</div>
{% load menu_tags %}

{% for child in children %}
<li class="child{% if child.children %} dropdown{% endif %}{% if child.selected %} selected{% endif %}{% if child.ancestor %} ancestor{% endif %}{% if child.sibling %} sibling{% endif %}{% if child.descendant %} descendant{% endif %}">
    <a
    {% if child.children %}class="dropdown-toggle" data-toggle="dropdown"{% endif %}
    href="{{ child.attr.redirect_url|default:child.get_absolute_url }}">
    {{ child.get_menu_title }}
    {% if child.children %} <b class="caret"></b>{% endif %}
  </a>
    {% if child.children %}
    <ul class="dropdown-menu">
        {% show_menu from_level to_level extra_inactive extra_active template "" "" child %}
    </ul>
    {% endif %}
</li>
{% endfor %}
<ul class="nav">
    {% show_menu 0 100 100 100 %}
</ul>

con el siguiente bloque:

{% include "inc/menu.html" %}

Para crear el breadcrumbs vamos a seguir la misma dinámica que con el menú.

{% load menu_tags %}

<div id="blue">
    <div class="container">
    <div class="row">
      {% show_breadcrumb 1 "inc/breadcrumbs_inc.html" %}
    </div><!-- /row -->
    </div> <!-- /container -->
</div><!-- /blue -->
{% for ance in ancestors %}
    {% if not forloop.last %}
    <a href="{{ ance.get_absolute_url }}"><h3 style="display: inline">{{ ance.get_menu_title }} &raquo; </h3></a> <span class="separator"></span>
    {% else %}
    <span class="active"><h3 style="display: inline">{{ ance.get_menu_title }}</h3></span>
    {% endif %}
{% endfor %}
{% extends "base.html" %}
{% load cms_tags %}

{% block title %}{% page_attribute "page_title" %}{% endblock title %}

{% block content %}
    {% include "inc/breadcrumbs.html" %}
    {% placeholder "content" %}
{% endblock content %}

También tendremos que añadirla al CMS_TEMPLATES del settings.py:

CMS_TEMPLATES = (
    ('fullwidth.html', 'Fullwidth'),
    ('sidebar_left.html', 'Sidebar Left'),
    ('sidebar_right.html', 'Sidebar Right')
    ('home.html', 'Home'),
    ('sobre_nosotros.html', 'Sobre nosotros'),
)

DEMO

Vamos a crear la página sobre_nosotros replicando la del tema SOLID.