Вы можете решить проблему дублирования, используя тег шаблона меню DRY menu. Это решает проблему активного / неактивного класса меню тоже. Смотрите описание ниже, пожалуйста. Исходный код: http://djangosnippets.org/snippets/2722/
Описание тега шаблона меню СУХОЙ.
Это описание пользовательского тега шаблона для создания СУХОГО меню. Это решает проблему дублирования разметки в шаблонах вашего сайта. В меню всегда есть одна активная опция и одна или несколько неактивных опций.
КАК ИСПОЛЬЗОВАТЬ
Определите структуру вашего меню в родительском шаблоне:
{% defmenu "menu1" %}
{% active %}<span class='active'>{{text}}</span>{% endactive %}
{% inactive %}<a href='{{url}}'>{{text}}</a>{% endinactive %}
{% opt "opt1" "/opt1/" %}Go to opt1{% endopt %}
{% opt "opt2" "/opt2/" %}Go to opt2{% endopt %}
{% opt "opt3" "/opt3/" %}Go to opt3{% endopt %}
{% enddefmenu %}
У меню есть свое имя (первый параметр тега 'defmenu'.
Первый параметр тега «opt» - это имя пункта меню. « text » внутри «active» / «inactive» будет заменен внутренним текстом тега «opt» (Перейти к opt ...), « url » независимо «активный» / «неактивный» будет заменен вторым параметром тега «opt»
Чтобы создать меню с одной выбранной опцией в дочернем шаблоне, выполните:
{% menu "menu1" "opt1" %}
Здесь: «menu1» - это название меню, которое было определено тегом «defmenu», опция «opt1» выбрана.
Результат применения меню выглядит следующим образом:
<span class='active'> Go to opt1</span> <a href='"/opt2/"'>Go to opt2</a> <a href='"/opt3/"'>Go to opt3</a>