Name | garpix-menu JSON |
Version |
1.17.1
JSON |
| download |
home_page | |
Summary | |
upload_time | 2024-03-14 11:43:12 |
maintainer | |
docs_url | None |
author | Garpix LTD |
requires_python | |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Garpix Menu
Настраиваемые меню для [garpix_page](https://pypi.org/project/garpix-page/).
## Быстрый старт
Сначала установите и настройте [garpix_page](https://pypi.org/project/garpix-page/).
---
Установите с pip:
```bash
pip install garpix_menu
```
Добавьте `garpix_menu` и пакеты зависимостей в `INSTALLED_APPS`:
```python
# 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
```
Добавьте путь и другие настройки:
```python
# settings.py
MIGRATION_MODULES = {
'garpix_menu': 'app.migrations.garpix_menu',
}
TEMPLATES = [
{
# ...
'OPTIONS': {
'context_processors': [
# ...
'garpix_menu.context_processors.menu_processor',
],
},
},
]
```
Создайте миграции:
```bash
python manage.py makemigrations
```
Примените миграции:
```bash
python manage.py migrate
```
### Пример
Set up your custom menus in `settings.py`, for example:
```python
# 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()]
```
Пример шаблона меню по умолчанию:
```html
# 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 %}
```
Пример со всеми шаблонами:
```html
# 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](https://github.com/garpixcms/garpix_menu/blob/master/CHANGELOG.md).
# Contributing
Смотрите [CONTRIBUTING.md](https://github.com/garpixcms/garpix_menu/blob/master/CONTRIBUTING.md).
# License
[MIT](LICENSE)
Raw data
{
"_id": null,
"home_page": "",
"name": "garpix-menu",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Garpix LTD",
"author_email": "info@garpix.com",
"download_url": "https://files.pythonhosted.org/packages/ab/82/45a04e5fe0a0769c8e5861ac865fa3304d4e9b6e7f280f07d5908cc759e6/garpix_menu-1.17.1.tar.gz",
"platform": null,
"description": "# Garpix Menu\n\n\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043c\u0435\u043d\u044e \u0434\u043b\u044f [garpix_page](https://pypi.org/project/garpix-page/).\n\n## \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 [garpix_page](https://pypi.org/project/garpix-page/).\n\n---\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0441 pip:\n\n```bash\npip install garpix_menu\n```\n\n\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 `garpix_menu` \u0438 \u043f\u0430\u043a\u0435\u0442\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 `INSTALLED_APPS`:\n\n```python\n# settings.py\n\nINSTALLED_APPS = [\n # ...\n 'garpix_menu',\n]\n\n```\n\n\u041f\u0430\u043a\u0435\u0442 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0439. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 (`app/migrations/garpix_page/`) \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u043f\u0443\u0441\u0442\u043e\u0439 `__init__.py`:\n\n```\napp/migrations/\napp/migrations/__init__.py # empty file\napp/migrations/garpix_menu/__init__.py # empty file\n```\n\n\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:\n\n```python\n# settings.py\n\nMIGRATION_MODULES = {\n 'garpix_menu': 'app.migrations.garpix_menu',\n}\n\nTEMPLATES = [\n {\n # ...\n 'OPTIONS': {\n 'context_processors': [\n # ...\n 'garpix_menu.context_processors.menu_processor',\n ],\n },\n },\n]\n```\n\n\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438:\n\n```bash\npython manage.py makemigrations\n```\n\n\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438:\n\n```bash\npython manage.py migrate\n```\n\n### \u041f\u0440\u0438\u043c\u0435\u0440\n\nSet up your custom menus in `settings.py`, for example:\n\n```python\n# settings.py\n\nMENU_TYPE_HEADER_MENU = 'header_menu'\nMENU_TYPE_FOOTER_MENU = 'footer_menu'\n\nMENU_TYPES = {\n MENU_TYPE_HEADER_MENU: {\n 'title': 'Header menu',\n },\n MENU_TYPE_FOOTER_MENU: {\n 'title': 'Footer menu',\n },\n}\n\nCHOICE_MENU_TYPES = [(k, v['title']) for k, v in MENU_TYPES.items()]\n```\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u0435\u043d\u044e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:\n\n```html\n# templates/menus/default.html\n\n{% for menu_item in menu %}\n<a {% if menu_item.target_blank %}target=\"_blank\" {% endif %}\n href=\"{{ menu_item.get_link }}\">{{ menu_item.title }}</a>\n{% if not forloop.last %}|{% endif %}\n{% endfor %}\n```\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438:\n\n```html\n# templates/base.html\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n {% include 'garpix_page/seo.html' %}\n <link href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\" rel=\"stylesheet\"\n crossorigin=\"anonymous\">\n</head>\n<body>\n{% include 'include/header.html' %}\n\n<main class=\"container\">\n {% block content %}\n {% endblock %}\n</main>\n\n{% include 'include/footer.html' %}\n</body>\n</html>\n\n# templates/pages/default.html\n\n{% extends 'base.html' %}\n\n{% block content %}\n<h1>{{object.title}}</h1>\n<div>\n {{object.content|safe}}\n</div>\n{% endblock %}\n\n# templates/include/header.html\n\n<nav class=\"navbar navbar-expand-md navbar-dark bg-dark\">\n <div class=\"container-fluid\">\n <a class=\"navbar-brand\" href=\"/\">My Site</a>\n <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarsExampleDefault\"\n aria-controls=\"navbarsExampleDefault\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n\n <div class=\"collapse navbar-collapse\" id=\"navbarsExampleDefault\">\n {% include 'menus/header_menu.html' with menu=menus.header_menu %}\n </div>\n </div>\n</nav>\n\n# templates/include/footer.html\n\n<style>\n /* Sticky footer styles\n -------------------------------------------------- */\n html {\n position: relative;\n min-height: 100%;\n }\n\n body {\n margin-bottom: 60px; /* Margin bottom by footer height */\n }\n\n .footer {\n position: absolute;\n bottom: 0;\n width: 100%;\n height: 60px; /* Set the fixed height of the footer here */\n line-height: 60px; /* Vertically center the text there */\n background-color: #f5f5f5;\n }\n\n</style>\n\n<footer class=\"footer\">\n <div class=\"container\">\n <span class=\"text-muted\">\n {% include 'menus/footer_menu.html' with menu=menus.footer_menu %}\n </span>\n </div>\n</footer>\n\n# templates/menus/header_menu.html\n\n<ul class=\"navbar-nav me-auto mb-2 mb-md-0\">\n {% for menu_item in menu %}\n <li class=\"nav-item\">\n <a class=\"nav-link {% if menu_item.is_current %}active{% endif %}\" aria-current=\"page\"\n {% if menu_item.target_blank %}target=\"_blank\" {% endif %}\n href=\"{{ menu_item.get_link }}\">{{ menu_item.title }}</a>\n </li>\n {% endfor %}\n</ul>\n\n# templates/menus/footer_menu.html\n\n{% for menu_item in menu %}\n<a {% if menu_item.target_blank %}target=\"_blank\" {% endif %}\n href=\"{{ menu_item.get_link }}\">{{ menu_item.title }}</a>\n{% if not forloop.last %}|{% endif %}\n{% endfor %}\n\n```\n\n\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0435\u043d\u044e \u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.\n\n# Changelog\n\n\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [CHANGELOG.md](https://github.com/garpixcms/garpix_menu/blob/master/CHANGELOG.md).\n\n# Contributing\n\n\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [CONTRIBUTING.md](https://github.com/garpixcms/garpix_menu/blob/master/CONTRIBUTING.md).\n\n# License\n\n[MIT](LICENSE)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "",
"version": "1.17.1",
"project_urls": {
"Changelog": "https://github.com/garpixcms/garpix_menu/blob/master/CHANGELOG.md/",
"Documentation": "https://docs.garpixcms.ru/packages/garpix_menu/",
"GitHub": "https://github.com/garpixcms/garpix_menu/"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "db8be6d6e5389c9aa660f2964854e0bc1c22d4e370ace8c9e19268a5d3347de1",
"md5": "c741fe57d8a80c78675a2999ee2f5a09",
"sha256": "9e79725b49cf57ba39eef1d550e6e3e642fd921be31a37d9fbb2ffcedcf803de"
},
"downloads": -1,
"filename": "garpix_menu-1.17.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c741fe57d8a80c78675a2999ee2f5a09",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 33146,
"upload_time": "2024-03-14T11:43:10",
"upload_time_iso_8601": "2024-03-14T11:43:10.686778Z",
"url": "https://files.pythonhosted.org/packages/db/8b/e6d6e5389c9aa660f2964854e0bc1c22d4e370ace8c9e19268a5d3347de1/garpix_menu-1.17.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ab8245a04e5fe0a0769c8e5861ac865fa3304d4e9b6e7f280f07d5908cc759e6",
"md5": "ca31e4c2d43a96a10c7ac1d5d1d09677",
"sha256": "92b2867b47d9b909847750122bd6a1911f3ffc7b668351d10bf85302948167d9"
},
"downloads": -1,
"filename": "garpix_menu-1.17.1.tar.gz",
"has_sig": false,
"md5_digest": "ca31e4c2d43a96a10c7ac1d5d1d09677",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 21240,
"upload_time": "2024-03-14T11:43:12",
"upload_time_iso_8601": "2024-03-14T11:43:12.019216Z",
"url": "https://files.pythonhosted.org/packages/ab/82/45a04e5fe0a0769c8e5861ac865fa3304d4e9b6e7f280f07d5908cc759e6/garpix_menu-1.17.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-14 11:43:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "garpixcms",
"github_project": "garpix_menu",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "garpix-menu"
}