Skip to main content

No project description provided

Project description

Garpix Menu

Настраиваемые меню для garpix_page.

Быстрый старт

Сначала установите и настройте garpix_page.


Установите с pip:

pip install garpix_menu

Добавьте garpix_menu и пакеты зависимостей в INSTALLED_APPS:

# settings.py

INSTALLED_APPS = [
    # ...
    'garpix_menu',
]

Пакет не включает миграции, укажите путь к каталогу миграций. Не забудьте создать этот каталог (app/migrations/garpix_page/) и поместить в него пустой __init__.py:

app/migrations/
app/migrations/__init__.py  # empty file
app/migrations/garpix_menu/__init__.py  # empty file

Добавьте путь и другие настройки:

# settings.py

MIGRATION_MODULES = {
    'garpix_menu': 'app.migrations.garpix_menu',
}

TEMPLATES = [
    {
        # ...
        'OPTIONS': {
            'context_processors': [
                # ...
                'garpix_menu.context_processors.menu_processor',
            ],
        },
    },
]

Создайте миграции:

python manage.py makemigrations

Примените миграции:

python manage.py migrate

Пример

Set up your custom menus in settings.py, for example:

# settings.py

MENU_TYPE_HEADER_MENU = 'header_menu'
MENU_TYPE_FOOTER_MENU = 'footer_menu'

MENU_TYPES = {
    MENU_TYPE_HEADER_MENU: {
        'title': 'Header menu',
    },
    MENU_TYPE_FOOTER_MENU: {
        'title': 'Footer menu',
    },
}

CHOICE_MENU_TYPES = [(k, v['title']) for k, v in MENU_TYPES.items()]

Пример шаблона меню по умолчанию:

# templates/menus/default.html

{% for menu_item in menu %}
<a {% if menu_item.target_blank %}target="_blank" {% endif %}
   href="{{ menu_item.get_link }}">{{ menu_item.title }}</a>
{% if not forloop.last %}|{% endif %}
{% endfor %}

Пример со всеми шаблонами:

# templates/base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {% include 'garpix_page/seo.html' %}
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet"
          crossorigin="anonymous">
</head>
<body>
{% include 'include/header.html' %}

<main class="container">
    {% block content %}
    {% endblock %}
</main>

{% include 'include/footer.html' %}
</body>
</html>

# templates/pages/default.html

{% extends 'base.html' %}

{% block content %}
<h1>{{object.title}}</h1>
<div>
    {{object.content|safe}}
</div>
{% endblock %}

# templates/include/header.html

<nav class="navbar navbar-expand-md navbar-dark bg-dark">
    <div class="container-fluid">
        <a class="navbar-brand" href="/">My Site</a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExampleDefault"
                aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarsExampleDefault">
            {% include 'menus/header_menu.html' with menu=menus.header_menu %}
        </div>
    </div>
</nav>

# templates/include/footer.html

<style>
    /* Sticky footer styles
    -------------------------------------------------- */
    html {
        position: relative;
        min-height: 100%;
    }

    body {
        margin-bottom: 60px; /* Margin bottom by footer height */
    }

    .footer {
        position: absolute;
        bottom: 0;
        width: 100%;
        height: 60px; /* Set the fixed height of the footer here */
        line-height: 60px; /* Vertically center the text there */
        background-color: #f5f5f5;
    }

</style>

<footer class="footer">
    <div class="container">
        <span class="text-muted">
            {% include 'menus/footer_menu.html' with menu=menus.footer_menu %}
        </span>
    </div>
</footer>

# templates/menus/header_menu.html

<ul class="navbar-nav me-auto mb-2 mb-md-0">
    {% for menu_item in menu %}
    <li class="nav-item">
        <a class="nav-link {% if menu_item.is_current %}active{% endif %}" aria-current="page"
           {% if menu_item.target_blank %}target="_blank" {% endif %}
           href="{{ menu_item.get_link }}">{{ menu_item.title }}</a>
    </li>
    {% endfor %}
</ul>

# templates/menus/footer_menu.html

{% for menu_item in menu %}
<a {% if menu_item.target_blank %}target="_blank" {% endif %}
   href="{{ menu_item.get_link }}">{{ menu_item.title }}</a>
{% if not forloop.last %}|{% endif %}
{% endfor %}

Теперь вы можете авторизоваться в панели администратора и начать добавлять меню и страницы.

Changelog

Смотрите CHANGELOG.md.

Contributing

Смотрите CONTRIBUTING.md.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

garpix_menu-1.17.0rc2.tar.gz (22.7 kB view details)

Uploaded Source

Built Distribution

garpix_menu-1.17.0rc2-py3-none-any.whl (35.2 kB view details)

Uploaded Python 3

File details

Details for the file garpix_menu-1.17.0rc2.tar.gz.

File metadata

  • Download URL: garpix_menu-1.17.0rc2.tar.gz
  • Upload date:
  • Size: 22.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.18

File hashes

Hashes for garpix_menu-1.17.0rc2.tar.gz
Algorithm Hash digest
SHA256 215e0f173a8cfcafa416c85f9a4a7aac6c6375e1e3ae0b6e8531478bf054a243
MD5 54b01727b76f6b9232429768baa58614
BLAKE2b-256 70b7f09b55ee435e6a63b0f0c8939508e731e67a2e3c83c252e5e74c4b68ac45

See more details on using hashes here.

File details

Details for the file garpix_menu-1.17.0rc2-py3-none-any.whl.

File metadata

File hashes

Hashes for garpix_menu-1.17.0rc2-py3-none-any.whl
Algorithm Hash digest
SHA256 b4e4493191d0680ecdc07674f32ee0765130cba0b5e3e5ad881365e69c233af0
MD5 42c254e4d81f9f2f3064ec1316f26e4f
BLAKE2b-256 fe5567677f6bc9b5e9b68b76c82073ccb8712934a04cdc24c1c75b01ec19bbd4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page