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

Django中/articles/1/正常加载,/articles/2/报404错误求助

问题排查与解决方法

1. 检查视图查询逻辑与URL参数的匹配

如果你的DetailView绑定的是ArticleContent模型,但URL传递的是文章的article_id而非ArticleContent自身的主键(pk),就会触发404。默认情况下DetailView会用URL里的pk参数匹配模型的主键字段(通常是id),而非外键article_id。

修复方案:修改视图逻辑,指定按article_id查询,同时调整URL参数名:

from django.views.generic.detail import DetailView
from .models import ArticleContent

class ArticleDetailView(DetailView):
    model = ArticleContent
    template_name = 'article_detail.html'
    pk_url_kwarg = 'article_id'  # 指定URL参数对应字段

    def get_object(self, queryset=None):
        # 明确通过article_id获取对应内容
        return ArticleContent.objects.get(article_id=self.kwargs['article_id'])

同时更新URL配置:

path('articles/<int:article_id>/', ArticleDetailView.as_view(), name='article-detail')

2. 确认Article模型存在对应ID的记录

如果视图关联的是Article模型,但Article表中没有id=2的记录,即使ArticleContent有article_id=2,也会因外键关联对象不存在导致查询失败(除非外键设置了null=True)。

修复方案:检查Article数据表,确保存在id=2的记录。如果Article与ArticleContent是一对一绑定,建议将外键改为OneToOneField,保证数据一致性。

3. 排查视图的QuerySet过滤条件

若视图设置了过滤规则(比如仅显示已发布文章),可能id=2的文章被过滤排除了。例如:

class ArticleDetailView(DetailView):
    model = Article
    queryset = Article.objects.filter(is_published=True)  # 若id=2的文章未发布,会触发404

修复方案:移除不必要的过滤条件,或修改对应文章的状态以符合过滤规则。

4. 验证模板数据引用是否正确

如果视图能正常获取数据,但模板中错误引用了其他文章的内容,也可能造成“数据不存在”的错觉。比如模板中固定调用了{{ article.content_set.first }},但id=2的文章有多条ArticleContent记录。

验证方法:在视图中添加调试代码,确认获取的对象是否正确:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    print(context['object'])  # 控制台查看获取的对象信息
    return context

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:15:31