расширение родительского шаблона django, а также включение переменной

#django #django-templates

#django #django-templates

Вопрос:

У меня есть базовый шаблон, который я пытаюсь расширить. С помощью этого шаблона у меня есть навигация, для которой требуется передача переменной.

Что я делал, так это пытался «расширить» его, используя include, подобный этому:

 {% include "base.html" with active_nav='atInventory' %}
  

но это не приводит к отображению блоков базы с расширенным содержимым в правильном порядке.

Навигация настроена в базе следующим образом:

     <nav class="col-xs-12 paddingVertical-sm">
        <ul class="removePadding removeMargin txtXxs">
            <li class="{% if active_nav == 'atContact' %} activeNav {% else %} inactiveNav{% endif %}">
                <a href="{% url 'contact' %}">CONTACT<a>
            </li>
            <li class="{% if active_nav == 'atAbout' %} activeNav {% else %} inactiveNav{% endif %}">
                <a href="{% url 'about' %}">ABOUT</a>
            </li>
            <li class="{% if active_nav == 'atProjects' %} activeNav {% else %} inactiveNav{% endif %}">
                <a href="{% url 'projects' %}">PROJECTS amp; CLINICS</a>
            </li>
            <li class="{% if active_nav == 'atServices' %} activeNav {% else %} inactiveNav{% endif %}">
                <a href="{% url 'services' %}">SERVICS</a>
            </li>
            <li class="{% if active_nav == 'atInventory' %}  activeNav {% else %} inactiveNav{% endif %}">
                <a href="{% url 'inventory' %}">INVENTORY</a>
            </li>
            <li class="{% if active_nav == 'atHome' %} activeNav {% else %} inactiveNav{% endif %}">
                <a href="{% url 'index' %}">HOME</a>
            </li>
            <br class="clear-fix">
        </ul>
        <img src="{% static 'images/assets/klossviolins_logo.png' %}" />
        <br class="clear-fix">
    </nav>
  

Есть ли лучший способ сделать это? Или это просто требует небольшой настройки? Заранее спасибо за любую помощь в этом.

Комментарии:

1. Вы пытаетесь включить шаблон или расширить его? Что такое основной шаблон?

2. не пытайтесь расширять с помощью include…it нарушает принципы логики… почему бы просто не расширить его? или создайте блок для той специальной области, которая использует active_nav

3. да, я думал об использовании блока, а затем использовании include with в этом блоке? Я пытаюсь расширить шаблон, по сути, это просто верхняя навигация и нижний колонтитул.

Ответ №1:

nI не стал бы этого делать — расширяйте его так, как было задумано. Include предназначен для включения повторно используемых компонентов. Здесь вы просто хотите, чтобы каждый шаблон расширял ваш ‘base.html ‘ с помощью {%extends ‘base.html ‘%}

Также просто указатель — я бы сделал active nav с помощью крошечного скрипта вместо тонны инструкций if. Итак, добавьте идентификатор к каждому элементу li (#nav-home для индекса в моем примере), и на вашей домашней странице появится что-то вроде:

 <script>
 $(document).ready(function() {
 $( "#nav-home").addClass("activeNav");
 });
</script>