В этой короткой статье я бы хотел рассмотреть как сделать в django меню для вашего сайта, статья будет очень короткая, но интересная для новичков.
Всего покажу здесь два способа, первый как сделать по обычному шаблону, а второе будет сгенерированное.
Также можете посмотреть несколько статьей про то как сделать меню на HTML и CSS:
Обычное меню на Djnago:
Первый способ очень простой, мы просто сделаем шаблон который будет отсылаться к разным страницам, и страницам категории.
Для создания шаблона мы сделаем файл «header.html», который расположим в папке «templates», которая в свою очередь находиться в нашего приложения.
Вот что будет в нём:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | {% load static %} <nav class="navbar navbar-expand-lg navbar-dark bg-primary"> <a class="navbar-brand" href="{% url 'index' %}">Главная</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mr-auto"> <li class="nav-item"><a class="nav-link" href="{% url 'category' 'cooking' %}">Кулинария</a></li> <li class="nav-item"><a class="nav-link" href="{% url 'category' 'it' %}">IT</a></li> <li class="nav-item"><a class="nav-link" href="{% url 'category' 'cars' %}">Машины</a></li> </ul> </div> </nav> |
Как видите в целом всё очень просто, самое главное что стоит отметить, это то, как мы получаем ссылки на конкретный страницы, всё это делается в конструкции {% %}
, разберём по подробнее.
В начале у нас идёт то что нам нужно получить, это url
, потом названия пути которое нам нужно, в нашем случае, в самом вверху это index
, то есть главная страница.
Примечание:
Названия пути назначается при настройки роутинга в «urls.py», во функции path()
, параметром name
.
Но это всё что касается только одной страницы, но если мы передаём в url ещё какой нибудь параметр, то это так не подойдёт, так как надо ещё один параметр, его назначаем через пробел ещё одной строкой, как указана, когда мы выводим категории.
Автоматизированное меню на Django:
В прошлом примере было видно, что такой вариант больше подойдёт для программистов, но что если вы хотите через админку настроить меню, для этого подойдёт пакет django_menu
.
В начале тут всё как обычно, нужно скачать библиотеку и подключить её в INSTALLED_APPS
.
Скачиваем библиотек:
1 | pip install django-menu |
Добавляем в INSTALLED_APPS
:
1 2 3 4 | INSTALLED_APPS = [ ... 'menu', ] |
Теперь делаем миграции:
1 | python3 manage.py migrate menu |
Теперь добавьте специальные настройки в параметры в массив TEMPLATE
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.request', ], }, }, ] |
Теперь заходите в админ панель, и там появиться приложение меню, в нём создаём новое, и присваиваем ему код, например headernavigation
.
Добавляем это меню в наш шаблон:
1 2 3 4 | <ul>{% load menubuilder %}{% menu headernavigation %} {% for item in menuitems %}<li><a href="{{ item.url }}" title="{{ item.title|escape }}"{% if item.current %} class='current'{% endif %}>{{ item.title }}</a></li> {% endfor %} </ul> |
Таким образом у нас должно появиться меню которое мы можем настраивать через админку, если вас заинтересовала эта библиотека, то зайдите по этой ссылке.
Вывод:
В этой статье рассказали о двух способов как сделать в Django меню для вашего сайта, как видите всё очень просто, и не чего сложного.