Джанго: несколько меню - PullRequest
0 голосов
/ 31 мая 2011

Мой сайт на основе Django будет иметь 3 отдельных меню.Пункты первого: контакт, информация, раскрытие.Второй будет иметь: условия и положения, политику конфиденциальности, авторские права.И пункты главного меню: Домой, ссылка1, ссылка2, ссылка2 ... Первые два меню будут иметь фиксированные пункты, и элементы последнего могут измениться.Поскольку я буду использовать forloop в шаблоне, каков наилучший подход для создания этих меню.Веб-страницы будут иметь только заголовок и контент.

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Мне нравится использовать теги шаблонов включения для динамических меню.

В my-app/templatetags/myappmenu.py у меня есть что-то вроде:

from django import template
register = template.Library()
@register.inclusion_tag('my-app/menu.html')
def myappmenu():
    return [("label1", "link1"), ("label2", "link2")]

Затем в вашем шаблонеВы можете циклически перемещаться по элементам и создавать меню в нужном вам формате (<p>, <ul> и т. д.).

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

0 голосов
/ 30 августа 2015

Вы можете остаться СУХОЙ и просто использовать django-menuware .Также поддерживается вложенных меню .

Установка:

pip install django-menuware
# Add `menuware` to your settings.py**
# Add `MENUWARE_MENU` to your settings.py:**

Настройки:

MENUWARE_MENU = {
    "RIGHT_NAV_MENU": [
        {   # Show `Login` to `unauthenticated` users ONLY
            "name": "Login",
            "url": "/login/",
            "render_for_unauthenticated": True,
        },
        {   # Show `Logout` to `authenticated` users ONLY
            "name": "Logout",
            "url": "/logout/",
            "render_for_authenticated": True,
        },
        {   # Show `Search` to all users
            "name": "Search",
            "url": "/search/",
            "render_for_unauthenticated": True,
            "render_for_authenticated": True,
        },
    ],
    "LEFT_NAV_MENU": [
        {   # Show `Admin` to `superuser` ONLY
            "name": "Admin",
            "url": "admin:index", # Reversible
            "render_for_authenticated": True,
            "render_for_superuser": True,
        },
       {   # Show `Comment Admin` to `staff` users ONLY
            "name": "Comment Admin",
            "url": "/review/admin/",
            "render_for_authenticated": True,
            "render_for_staff": True,
        },
    ]

Использование:

<!-- base.html -->
{% load menuware %}

<!DOCTYPE html>
<html>
    <head><title>Django Menuware</title></head>
    <body>
        <!-- NAV BAR Start -->
        {% get_menu "LEFT_NAV_MENU" as left_menu %}
        <div style="float:left;">
            {% for item in left_menu %}
                <li class="{% if item.selected %} active {% endif %}">
                    <a href="{{item.url}}">{{item.name}}</a>
                </li>
            {% endfor %}
        </div>

        {% get_menu "RIGHT_NAV_MENU" as right_menu %}
        <div style="float:right;">
            {% for item in right_menu %}
                <li class="{% if item.selected %} active {% endif %}">
                    <a href="{{item.url}}">{{item.name}}</a>
                </li>
            {% endfor %}
        </div>
        <!-- NAV BAR End -->
    </body>
</html>

Как минимум, вы захотите взглянуть на страницу Github README , прежде чем развернуть свою собственную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...