Управляемое меню в Django

4 комментария

Создадим простое и гибкое меню на сайте, которым можно будет управлять через админку Django.

Установка приложения

Зайдите в директорию проекта и установите приложение для работы с меню.

git clone https://github.com/selevit/mymenu

Добавьте mymenu в INSTALLED_APPS.

INSTALLED_APPS = (
    # ...
    'mymenu',
)

Добавьте mymenu.context_processors.context в TEMPLATE_CONTEXT_PROCESSORS.

TEMPLATE_CONTEXT_PROCESSORS = (
    # ... (default context processors) 

    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.request',

    # MyMenu context
    'mymenu.context_processors,context',
)

Выполните команду python manage.py syncdb для обновления структуры БД.

Добавление меню

Теперь зайдите в админку и добавьте новое меню. Добавление меню в админке Django

Вы можете задать атрибуты title и target у определенного пункта.

Вывод меню в шаблоне

Поле slug будет использоваться для вывода меню в шаблоне.

Вы можете добавить другие меню и использовать поле slug для доступа к ним. Пункты каждого меню доступны в {{ menu.<menu_slug>.items }}.

{% for menu_item in menu.top.items %}
    {% ifequal request.get_full_path menu_item.url %}
        <span class="active">{{ menu_item.name }}</span>
    {% else %}

    <a href="{{ menu_item.url }}"

    {% if menu_item.title %}
        title="{{ menu_item.title }}"
    {% endif %}

    {% if menu_item.target %}
        target="{{ menu_item.target }}"
    {% endif %}>{{ menu_item.name }}</a>
{% endifequal %}

Код приложения на github.

Комментарии к статье: 4

Подождите, загружаются комментарии...

Возможность комментировать эту статью отключена автором. Возможно, во всем виновата её провокационная тематика или большое обилие флейма от предыдущих комментаторов.

Если у вас есть вопросы по содержанию статьи, рекомендуем вам обратиться за помощью на наш форум.