基于Django的博客系统之增加类别导航栏(六)

上一篇:基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)
下一篇:

功能概述

  1. 博客类型导航栏。

需求详细描述

1. 博客类型导航栏

  • 描述: 在博客首页添加类型导航栏,用户可以通过导航栏选择不同类型的博客文章。
  • 功能要求:
    • 导航栏位置:页面顶部或侧边栏。
    • 支持多种博客类型(如技术、生活、旅行等)。
    • 点击导航栏中的类型标签,显示对应类型的博客文章。
  • 用户故事:
    • 作为用户,我希望能够通过导航栏快速浏览特定类型的博客文章。

具体实现

在 Django 中实现博客类别导航栏功能可以通过以下步骤完成:

1.定义模型

首先,你需要定义一个模型来存储博客的类别信息。在你的 Django 应用中创建一个名为 models.py 的文件,并添加如下代码:

python 复制代码
from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

2.修改post模型:

在你的 Django 应用中的post模型增加category外键,并添加如下代码:

python 复制代码
class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    author = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    category = models.ForeignKey(BlogCategory, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return self.title

3.迁移数据库:

运行以下命令创建数据库迁移文件并应用迁移:

bash 复制代码
python manage.py makemigrations
python manage.py migrate

4.创建视图:

在之前的post视图来增加类别导航栏的显示。在你的应用中的 views.py 文件中添加以下代码:

python 复制代码
def post_list(request):
    users = CustomUser.objects.all()  # 假设你有一个名为 User 的模型,用来存储用户信息
    posts = Post.objects.all()
    carousels = Carousel.objects.filter(active=True)
    categories = BlogCategory.objects.all()
    return render(request, 'blog/post_list.html', {'categories': categories, 'posts': posts, 'user_list': users, 'carousels': carousels})

5.增加模板:

在你的post_list.xml应用中创建一个名为 navbar.html 的模板文件来渲染类别导航栏。在模板中,你可以使用 Bootstrap 或其他前端框架来设计导航栏。以下是一个简单的例子:

html 复制代码
<!-- navbar.html -->
<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <div class="container">
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarNav">
      <ul class="navbar-nav">
        {% for category in categories %}
          <li class="nav-item">
            <a class="nav-link" href="#">{{ category.name }}</a>
          </li>
        {% endfor %}
      </ul>
    </div>
  </div>
</nav>

现在,当你访问你的网站时,类别导航栏应该会显示在页面的顶部,并包含你在数据库中定义的所有类别。

6.效果如下:

相关推荐
大维15 小时前
DBX 实测:从 SQLite 查询到 MiniMax-M3 自然语言生成 SQL
数据库·sql·sqlite
玖米GEO运营王总监16 小时前
2026年账号矩阵协同效应怎么量化:三个指标与公式结构
java·大数据·数据库
景煜拾年17 小时前
InnoAI SQL 助手
运维·数据库·笔记·sql
.痞老板.18 小时前
mysql初阶--数据类型
android·数据库·mysql
deepseek2318 小时前
Agent任务中途断线,怎么避免重复执行?SQLite检查点实测
python·sqlite·任务调度·幂等性·ai agent
Risehuxyc18 小时前
MySQL密码插件
数据库·mysql
腾科IT教育19 小时前
Oracle考试全解析:OCP、OCM认证体系与核心考点备考指南
数据库·oracle·开闭原则
叼烟扛炮1 天前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
.痞老板.1 天前
mysql初阶--数据库基础
数据库·mysql
城北徐宫1 天前
MySQL约束条件一览
数据库·mysql