2013-02-13 3 views
1

У меня есть мнение:меню навигации с Django

def about(request): 
    return render(request, 'about.html', {'page_about_exist':1,}) 

В HTML у меня есть этот код:

<li {% if page_about_exist %} class="active" {% endif %}><a href="{% url about_project %}"> About</a></li> 

Итак, если я иду в О-странице, в меню есть класс активного , и я вижу это визуально. Есть ли другой способ без словаря? Потому что у меня есть в url

url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login',), 

и мой способ со словарем отлично смотрится там. Благодарю.

ответ

1

Вы должны делать такие вещи с наследованием шаблонов. Например, ваш base.html может включать в себя список навигации с:

<li{% block products %}{% endblock %}><a href...>Products</a></li> 
<li{% block about %}{% endblock %}><a href...>About</a></li> 

Затем в about шаблона (если он наследует от base) у вас есть:

{% block about %} class="active"{% endblock %} 

Это будет отображаться как чистый HTML, используя класс, который вы определили для активных страниц. Поскольку он использует простое наследование шаблона, вы также можете получить отличный контроль над этим.

+0

Это работает, но не СУХОЙ. Я предпочитаю подход на велосипедах. –

+0

@NickBewley Где повторение? –

+0

Разница заключается в том, что она записывается один раз в 'base.html' и записывает его несколько раз в каждом шаблоне. Кроме того, имеет смысл хранить все базовые элементы (т.е. навигация) в 'base.html'. Как я уже сказал, наследование - это неправильный подход, но, на мой взгляд, добавляет ненужные элементы унаследованным шаблонам. –

1

Я использую свой собственный тег шаблона под названием ifnav.

Использование очень просто. Просто добавьте его в свой INSTALLED_APPS и убедитесь, что обработчик контекста запроса активирован.

После этого вы можете написать это:

<li {% ifnav "^/about/" %} class="active" {% endifnav %}><a href="{% url about_project %}"> About</a></li> 

Для текущих проектов я использую Django CMS, которая заботится о визуализации навигации.

Смежные вопросы