You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django无法通过URL中的分类名称筛选对应分类内容的问题

问题原因

当前视图逻辑仅查询了全部CategoryPosts数据,未根据URL匹配到的分类进行过滤,因此无法返回对应分类的内容。

修正步骤

  1. 首先修正models.py中的拼写错误
    原代码中外键字段使用了小写的Foreignkey,Django中正确的类名是驼峰格式的ForeignKey,否则会触发属性错误:
# 修正前
CategoryPostsRev = models.Foreignkey(CategoryType, related_name='topics',on_delete=models.CASCADE)
# 修正后
CategoryPostsRev = models.ForeignKey(CategoryType, related_name='topics',on_delete=models.CASCADE)
  1. 修改views.py中的查询逻辑,添加筛选条件
    有两种写法可选,效果一致:

写法1:直接筛选外键关联对象

from django.shortcuts import render, get_object_or_404

def Category(request,Category_id):
    # 用get_object_or_404替代get,不存在对应分类时返回404,避免500错误
    CategoryObj = get_object_or_404(CategoryType, CategoryNameUrl=Category_id)
    # 筛选外键指向当前分类的文章
    posts = CategoryPosts.objects.filter(CategoryPostsRev=CategoryObj)
    return render(request,'Category.html',{
        'cat':CategoryObj,
        'post':posts
    })

写法2:使用外键的related_name直接查询(更简洁)

因为你在定义外键时设置了related_name='topics',可以直接通过分类对象反向查询关联的所有文章:

from django.shortcuts import render, get_object_or_404

def Category(request,Category_id):
    CategoryObj = get_object_or_404(CategoryType, CategoryNameUrl=Category_id)
    # 反向查询关联文章
    posts = CategoryObj.topics.all()
    return render(request,'Category.html',{
        'cat':CategoryObj,
        'post':posts
    })

内容的提问来源于stack exchange,提问作者0xff3z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:24:04