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

Python Django项目无法从数据库拉取数据展示在list.html页面问题求助

Django Post列表不显示问题排查

以下是代码中存在的所有问题,按影响优先级排序:

1. 模型文件缩进错误(核心问题)

你的Models.py中,Meta类、__str__方法、get_absolute_url方法的缩进层级错误,不属于Post类的内部成员,导致Django无法识别这些核心属性/方法,轻则属性调用报错,重则数据查询异常。
请调整缩进,将这三部分放到Post类内部,顺带修复默认管理器命名错误(原代码写的是object,少了s):

class Post(models.Model):
    # 原有字段保持不变
    STATUS_CHOICES = (('draft', 'Draft'),('published','Published'),)
    title=models.CharField(max_length=250)
    slug=models.SlugField(max_length=250,unique_for_date='publish')
    author = models.ForeignKey(User,on_delete=models.CASCADE,related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES,default='draft')
    objects = models.Manager() 
    published = PublishedManager()
    
    # 下面这部分调整缩进,放到Post类内部
    class Meta:
        ordering = ('-publish',)
    
    def __str__(self) :
        return self.title

    def get_absolute_url(self):
        return reverse("blog:post_detail", args=[self.publish.year,self.publish.month,self.publish.day,self.slug])

2. 数据状态不符合查询条件

你在视图中用Post.published.all()查询,自定义管理器只返回status='published'的文章,但Post模型的status字段默认值是draft。如果你在后台添加文章时没有手动将状态改为Published,查询结果为空,列表自然没有内容。
修复方案:

  • 进入Django admin后台,将已添加的Post文章状态改为Published
  • 测试阶段也可以先把视图查询代码改为posts = Post.objects.all(),显示所有状态的文章

3. 模板变量大小写错误

你在list.html中写的是{{post.Publish}},但模型中字段名是小写的publish,Django模板变量区分大小写,该字段会显示为空。
修复:改为{{ post.publish }}

4. 不影响列表显示,但需要修复的其他问题

  • 详情视图post_detail中错用了get_list_or_404,该方法返回查询结果列表,取单篇文章应该用get_object_or_404,否则详情页会报错
  • 模板中<a>标签内多了一个多余的字符a,会导致每个标题前多显示一个a,直接删掉即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:09:03