Package: garpix-menu
Garpix MenuНастраиваемые меню дляgarpix_page.Быстрый стартСначала установите и настройтеgarpix_page.Установите с pip:pipinstallgarpix_menuДобавьтеgarpix_menuи пакеты зависимостей вINSTALLED_APPS:# settings.pyINSTALLED_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.pyMIGRATION_MODULES={'garpix_menu':'app.migrations.garpix_menu',}TEMPLATES=[{# ...'OPTIONS':{'context_processors':[# ...'garpix_menu.context_processors.menu_processor',],},},]Создайте миграции:pythonmanage.pymakemigrationsПримените миграции:pythonmanage.pymigrateПримерSet up your custom menus insettings.py, for example:# settings.pyMENU_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'])fork,vinMENU_TYPES.items()]Пример шаблона меню по умолчанию:# templates/menus/default.html

{% for menu_item in menu %}<a{%ifmenu_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><htmllang="en"><head><metacharset="UTF-8">{% include 'garpix_page/seo.html' %}<linkhref="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"rel="stylesheet"crossorigin="anonymous"></head><body>{% include 'include/header.html' %}<mainclass="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<navclass="navbar navbar-expand-md navbar-dark bg-dark"><divclass="container-fluid"><aclass="navbar-brand"href="/">My Site</a><buttonclass="navbar-toggler"type="button"data-bs-toggle="collapse"data-bs-target="#navbarsExampleDefault"aria-controls="navbarsExampleDefault"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><divclass="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><footerclass="footer"><divclass="container"><spanclass="text-muted">{% include 'menus/footer_menu.html' with menu=menus.footer_menu %}</span></div></footer># templates/menus/header_menu.html<ulclass="navbar-nav me-auto mb-2 mb-md-0">{% for menu_item in menu %}<liclass="nav-item"><aclass="nav-link {% if menu_item.is_current %}active{% endif %}"aria-current="page"{%ifmenu_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{%ifmenu_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.LicenseMIT