从django管理中重新排序导航栏

问题描述 投票:0回答:1

所以我目前正在做一个项目,客户提出了这个要求。

基本上,我必须在管理面板中提供某种机制,以便管理员可以对导航栏项目进行排序。当前的导航栏就像上图一样,管理员应该可以设置顺序,例如:SIGN-IN SIGN-UP ABOUT HOME。

我是Django新手,但有不错的编程能力。谁能给我指点一下?

django bootstrap-4 navigation-drawer
1个回答
0
投票

你必须让导航条的显示是数据驱动的。

  1. 为导航条显示创建一个模型。
from django.db import models

class Navbar(models.Model):
    name = models.CharField(max_length=100)
    display_order = models.IntegerField(null=True, blank=True)
  1. 注册该模型,以便用户可以在管理员中进行修改。
from django.contrib import admin
from .models import Navbar

admin.site.register(Navbar)

  1. 为模型类的每个所需的导航条链接创建对象。

  2. 使用content_processors将导航条对象传递给包含导航条的模板(一般是base.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')
    }
  1. 现在你可以使用for循环将链接添加到base.html模板中,它们将按照display_order指定的顺序显示,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>

这段代码还没有经过测试,但总体思路应该是可行的。

© www.soinside.com 2019 - 2024. All rights reserved.