从 django admin 重新排序导航栏

Posted

技术标签:

【中文标题】从 django admin 重新排序导航栏【英文标题】:Reorder nav bar from django admin 【发布时间】:2020-08-04 04:12:46 【问题描述】:

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

基本上,我必须在管理面板中提供某种机制,以便管理员可以订购导航栏项目。 Current nav bar 如上图所示,管理员应该能够将顺序设置为例如。登录 注册 关于 主页

我是 Django 新手,但有不错的编程技能。谁能指出我正确的方向?

【问题讨论】:

首页、关于、注册、登录是最佳实践 【参考方案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 将导航栏对象传递给包含导航栏的模板(通常是 base.html)。此链接详细说明了如何使用内容处理器。

How can i pass data to django layouts (like 'base.html') without having to provide it through every view?

您在 content_processors.py 中的函数应该与此类似。

from .models import Navbar
def add_navbar_data_to_base(request):
    return 
        'navbar': Navbar.objects.all().order_by('display_order')
    
    现在您可以使用 for 循环将链接添加到 base.html 模板,它们将按照 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>

此代码尚未经过测试,但总体思路应该可行。

【讨论】:

以上是关于从 django admin 重新排序导航栏的主要内容,如果未能解决你的问题,请参考以下文章

element-admin,首页为普通vue页面,不需要需要侧边栏和导航栏

vue-element-admin快捷导航(标签栏导航)

重新加载页面后如何突出显示导航栏中的活动菜单项

vue-element-admin修改顶部导航栏

Sonata admin-bundle - 没有注销导航栏

导航链接在导航栏中不起作用(Bootstrap)(Django)