Изменить порядок панели навигации от django admin - PullRequest
0 голосов
/ 21 апреля 2020

Итак, я сейчас работаю над проектом, и клиент запросил это требование.

По сути, я должен предоставить какой-то механизм в панели администратора, чтобы администратор мог упорядочивать элементы панели навигации. Текущая панель навигации Как и на картинке выше, администратор должен иметь возможность установить порядок, например. РЕГИСТРАЦИЯ РЕГИСТРАЦИЯ О ГЛАВНОЙ

Я новичок в Django, но у меня есть приличные навыки программирования. Кто-нибудь может указать мне правильное направление?

1 Ответ

0 голосов
/ 22 апреля 2020

Вам придется настроить отображение панели навигации на данные.

  1. Создание модели для отображения панели навигации.
from django.db import models

class Navbar(models.Model):
    name = models.CharField(max_length=100)
    display_order = models.IntegerField(null=True, blank=True)
Зарегистрируйте модель, чтобы пользователь мог ее изменить в админке.
from django.contrib import admin
from .models import Navbar

admin.site.register(Navbar)

Создание объектов для класса модели для каждой из требуемых ссылок навигационной панели.

Используйте content_processors для передачи объекта навигационной панели в шаблон, который содержит навигационную панель (обычно базовую. html). Эта ссылка подробно объясняет, как использовать контент-процессоры.

Как передать данные в django макеты (например, «base.html»), не предоставляя их через каждый просмотр?

Ваша функция в content_processors.py должна быть похожа на эту.

from .models import Navbar
def add_navbar_data_to_base(request):
    return {
        'navbar': Navbar.objects.all().order_by('display_order')
    }
Теперь вы можете добавить ссылки на базу. html шаблон с помощью a для l oop, и они будут отображаться в порядке, указанном display_order, который может быть изменен администратором.
#base.html
<!DOCTYPE html>
{% load static %}
<html>

<head>
</head>

<body>
    {% block nav %}
    <nav class="navbar sticky-top navbar-expand navbar-light">

        <ul class="navbar-nav">
           {% for link in navbar %}
            <li class="nav-item">
                <a class="nav-link">{{ link }}</a>
            </li>
           {% endfor %}

        </ul>
    </nav>

    {% endblock %}

    {% block content %}
    {% endblock %}

</body>

</html>

Этот код не был проверен, но общая идея должна работать.

...