Django博客项目(三)—— 博客列表及搜索

本文详细介绍了如何在Django博客项目中实现博客列表和搜索功能。包括分页显示博客、博客搜索、最近发表的博客展示以及博客分类统计。通过设置路由、编写视图函数和前端页面的相应处理,实现了动态展示和搜索功能。
摘要由CSDN通过智能技术生成

前情提要:
Django博客项目(一)—— 注册和登录页面
Django博客项目(二)—— 博客首页

本文继续介绍博客项目的第三部分,博客列表及博客搜索功能的实现。

效果图

在这里插入图片描述
本页面总共可看作五个部分:

  1. 博客信息

显示在页面上的信息包括:发表时间、分类、标题、内容、作者、回复数量。

  1. 分页显示

为了使页面整洁,使用分页的方法显示博客,每页显示四篇。

  1. 博客搜索

填入关键字,点击搜索图标,即可进行搜索。标题或内容包含关键字的博客会显示在结果页面中。

  1. 最近发表的博客

最近发表的四篇博客会显示在页面中。信息包括标题及回复数量。

  1. 博客分类统计

显示各个分类的博客数量。

settings.py文件中添加配置

COUNT_PER_PAGE = 4

路由配置

本页面使用的路由有:

app_name = 'App01'
urlpatterns = [
    path('blogs/', views.blogs, name='blogs'),
    path('blogs/<int:page>/', views.blogs, name='blogs'),
    path('search/<pattern>/', views.search, name='search'),
    path('search/<pattern>/<int:page>/', views.search, name='search'),
]

博客列表和搜索功能都使用两个路由,他们分别使用同一个视图函数,主要是为了在分页显示博客时,可根据路由中的页码进行页面显示。

视图函数

# 博客列表
def blogs(request, page=1):
    categories = BlogCategory.objects.all()
    # 博客显示顺序为按最近发表进行排序
    blogs_count = BlogPost.objects.order_by('-addtime')

    paginator = Paginator(blogs_count, COUNT_PER_PAGE)
    page_obj = paginator.page(int(page))
    # 分页显示
    page_data = {
   
        'data': page_obj.object_list,
        'page_objs': page_obj,
        'page_range': paginator.page_range,
        'page_nums': paginator.num_pages
    }
    return render(request, 'blog_r/blog.html', locals())

# 博客搜索
def search(request, pattern, page=1):
    if request.method == 'POST':
        pattern = request.POST.get('search_pattern')
    else:
        pattern = pattern
    # 结果为标题或内容包含关键字的博客
    search_blogs = BlogPost.objects.filter(Q(content__icontains=pattern) | Q(title__icontains=pattern)).all()
    categories = BlogCategory.objects.a
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值