【问题标题】:Reorder nav bar from django admin从 django admin 重新排序导航栏
【发布时间】:2020-08-04 04:12:46
【问题描述】:
所以我目前正在做一个项目,客户提出了这个要求。
基本上,我必须在管理面板中提供某种机制,以便管理员可以订购导航栏项目。
Current nav bar
如上图所示,管理员应该能够将顺序设置为例如。登录 注册 关于 主页
我是 Django 新手,但有不错的编程技能。谁能指出我正确的方向?
【问题讨论】:
标签:
django
bootstrap-4
navigation-drawer
【解决方案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>
此代码尚未经过测试,但总体思路应该可行。