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

Django配置AutoSlugField后访问详情页报No News matches the given query如何解决

Django访问新闻详情页触发404(No News matches the given query)的原因及解决方案

核心原因

  • 列表视图传参错误:newsListView中查询得到的数据集变量为news_list,但往模板传值时错误使用了未定义的news变量,导致模板渲染时无法拿到正确的新闻对象,生成的链接中slug为空,访问时无法匹配到对应数据。
  • 历史数据slug字段为空:AutoSlugField默认仅在对象首次创建时自动生成值,如果你是先创建了News表数据再新增slug字段,或是早期保存数据时未触发slug生成逻辑,现有存量新闻的slug均为null,自然无法通过slug查询到对应对象。
  • 模板链接拼接不规范:硬编码路径/{{news.slug}}/如果和路由实际前缀不匹配,会导致传入视图的slug值错误,无法匹配到数据。
  • AutoSlugField配置缺陷:未设置unique参数时,如果存在重复标题的新闻,slug生成会失败或是重复,也会触发查询不到的问题。
  • 补充:newsDetailView当前仅做了查询逻辑,缺少返回响应的代码,虽不会直接触发404,但也会导致页面访问异常。

修复方案

  1. 修复列表视图传参错误
def newsListView(request):
    news_list = News.objects.all()
    # 业务逻辑处理后返回数据
    return render(request, 'news/index.html', {
            'news_list': news_list
    }) 

同时模板中需要遍历数据集生成列表:

{% for news in news_list %}
<a class="news-list text-dark" href="{% url 'detail' slug=news.slug %}">
<!-- 其他新闻展示代码 -->
</a>
{% endfor %}
  1. 补全存量数据的slug值
    进入Django shell执行以下代码,重新生成所有已有新闻的slug:
# 把下方的app名替换为你存放News模型的应用名
from app名.models import News
for news in News.objects.all():
    news.save()
  1. 优化AutoSlugField配置
    修改模型的slug字段定义,避免后续生成失败:
slug = AutoSlugField(populate_from='title', unique=True)

如果需要标题修改时同步更新slug,可以额外加always_update=True参数,不需要则不加,同时移除null=True和blank=True避免空值。

  1. 补全详情视图的返回逻辑
def newsDetailView(request, slug):
    news = get_object_or_404(News, slug=slug)
    # 替换为你实际的详情模板路径
    return render(request, 'news/detail.html', {'news': news})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:02