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

Django通过URL按分类筛选服务出现Page not found (404)错误

问题根因

你页面跳转后出现/services/None报错的核心原因是Category模型的slug字段允许为空,你已入库的分类数据没有填充slug值,调用get_absolute_url方法时就会把None作为参数传入路由,自然匹配不到对应的分类,触发404。

第一步:修正Category模型的slug字段配置

首先要保证每个分类都有唯一的slug值,我们可以通过重写save方法自动根据分类名称生成slug,无需手动填写,修改home_app/models.py代码如下:

from django.db import models
from django.urls import reverse
from django.utils.text import slugify # 导入自动生成slug的工具

class Category(models.Model):
    name=models.CharField(primary_key=True, max_length=50)
    # 去掉null=True,blank=True保留后台手动修改的能力
    slug=models.SlugField(unique=True, blank=True)
    image=models.ImageField(upload_to='category_home')
    description=models.CharField(max_length=100)
    content=models.TextField(max_length=500, default="Service")
    created=models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = 'Category'
        verbose_name_plural = 'Categories'

    def __str__(self):
        return self.name

    # 重写save方法,自动生成slug
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('services_by_category', args=[self.slug])

第二步:执行数据库迁移,补全已有分类的slug

修改模型后执行迁移命令:

python manage.py makemigrations
python manage.py migrate

如果迁移时提示已有数据slug为空的错误,可先进入Django shell手动补全存量数据:

python manage.py shell

在shell交互界面执行以下代码:

from home_app.models import Category
from django.utils.text import slugify

for cate in Category.objects.all():
    if not cate.slug:
        cate.slug = slugify(cate.name)
        cate.save()

第三步:修正路由匹配规则(可选,规避额外404)

Django默认会对不带末尾斜杠的请求做301跳转,建议给子路由加上末尾斜杠避免匹配异常,修改services_app/urls.py:

from django.urls import path
from services_app import views

urlpatterns = [
    path('', views.service_list, name='Services'),
    path('<slug:category_slug>/', views.service_list, name='services_by_category'), # 新增末尾斜杠
]

所有修改完成后重启服务,点击分类链接就会生成正常的路径,成功匹配对应分类的服务列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:09:00