你是不是也受够了每次改个导航栏菜单,都要战战兢兢地去服务器上修改模板文件?是不是也梦想着产品经理能自己点点按钮就把菜单项给换了?别急,今天这篇“Django装修指南”,就是来拯救你的!我将手把手带你,从零开始,打造一个属于你自己的、会呼吸的、活生生的导航栏管理系统。
第一章:导航栏的“原始社会”——我们为何要革命?
想象一下这个场景:你的项目有个导航栏,上面写着“首页”、“关于我们”、“产品介绍”、“联系我们”。一开始,这很简单,你在 base.html 模板里写死了这么几行代码:
<nav>
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="/">首页</a></li>
<li class="nav-item"><a class="nav-link" href="/about/">关于我们</a></li>
<li class="nav-item"><a class="nav-link" href="/products/">产品介绍</a></li>
<li class="nav-item"><a class="nav-link" href="/contact/">联系我们</a></li>
</ul>
</nav>
看起来岁月静好,是吧?但很快,产品经理跑过来,满脸堆笑:“哥们儿,咱们加个‘新闻动态’吧,就在‘产品介绍’后面。” 你点点头,打开代码,修改,测试,部署。过两天,他又来了:“那个……‘关于我们’改名叫‘团队风采’会不会更亲切点?” 你深吸一口气,继续修改、测试、部署。
痛点来了: 这种“硬编码”的方式,让导航栏这个本应灵活变动的部分,变成了项目里一个“僵硬的化石”。每一次微小的改动,都需要开发人员介入,动用宝贵的开发、部署资源。这简直就像为了换一幅挂画,而把整面墙都重新装修一遍!
所以,我们的革命目标很明确:把导航栏的数据和逻辑从模板中解放出来,存到数据库里,并做一个友好的管理页面,让不懂代码的人也能管理它!
第二章:打造导航栏的“心脏”——数据模型设计
任何动态功能的核心,都是数据。我们的导航栏需要哪些信息呢?我们来给它设计一个“身份证”,也就是Django的Model。
在你的App(比如我这里的App叫 core)的 models.py 文件里,我们来定义一个 NavbarItem 模型。
from django.db import models
from django.urls import reverse
from django.utils.text import slugify
class NavbarItem(models.Model):
# 显示在菜单上的文本,比如“首页”
title = models.CharField(max_length=50, verbose_name="菜单名称")
# 点击后跳转的链接。可以是绝对路径,也可以是Django的URL name
link = models.CharField(max_length=200, verbose_name="链接地址", blank=True)
# 显示顺序,数字越小排越前面
order = models.IntegerField(default=0, verbose_name="排序")
# 是否显示这个菜单项,方便快速上下架
is_visible = models.BooleanField(default=True, verbose_name="是否显示")
# 创建一个时间戳,记录创建时间(锦上添花)
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
class Meta:
verbose_name = "导航栏菜单"
verbose_name_plural = "导航栏菜单"
ordering = ['order', 'created_at'] # 默认按order排序,相同order按创建时间
def __str__(self):
return f"{self.title} (顺序:{self.order})"
def get_absolute_url(self):
"""
一个贴心的小方法,帮助我们智能地处理链接。
如果link以http开头,认为是外部链接。
否则,尝试将其视为Django的url name来反向解析。
如果解析失败,就原样返回。
"""
if self.link.startswith('http'):
return self.link
try:
# 这里假设你的link字段存的是url的name,比如 'home'
return reverse(self.link)
except:
return self.

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



