#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>