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

如何在非Wagtail的Django模板中展示Wagtail最新博客文章?

在Django主站首页展示Wagtail已发布博客文章的解决方案

核心问题分析

你当前代码无内容输出的主要原因:Wagtail页面区分发布/草稿状态,直接调用BlogPage.objects.all()会包含未发布内容;另外如果首页是普通Django视图而非Wagtail管理的Page实例,page.blogs无法被正确识别。

分步解决

1. 过滤已发布的博客文章

如果首页是Wagtail管理的Page页面,修改HomePage模型,用Wagtail提供的live()方法筛选已发布内容:

from myblog.models import BlogPage

class HomePage(Page):
    def blogs(self):
        # 仅获取已发布内容,按日期倒序排列
        return BlogPage.objects.live().order_by('-date')

2. 适配普通Django视图场景

如果首页是普通Django视图(非Wagtail Page),不要依赖HomePage模型的方法,直接在视图中查询并传递数据到模板:

# 首页视图示例
from django.shortcuts import render
from myblog.models import BlogPage

def home(request):
    # 可添加[:3]限制展示数量,比如只显示最新3篇
    latest_blogs = BlogPage.objects.live().order_by('-date')
    return render(request, 'home.html', {'latest_blogs': latest_blogs})

对应模板修改为遍历latest_blogs,同时必须加载Wagtail核心标签以支持pageurl:

{% load wagtailcore_tags %}
{% for blog in latest_blogs %}
<div class="col-md-4">
    <a class="blog-post-link" href="{% pageurl blog %}">
      <h3>{{ blog.title }}</h3>
    </a>
    <div class="blog-intro">
      {{ blog.body|richtext|truncatewords_html:50 }}
      <a class="read-more" href="{% pageurl blog %}">Read More &raquo;</a>
    </div>
</div>
{% endfor %}

3. 关键验证步骤

  • 检查Wagtail后台:确认博客文章已点击发布按钮(仅保存草稿不会出现在live()查询集中)
  • 验证查询集:在代码中添加print(BlogPage.objects.live().count()),查看控制台输出是否大于0
  • 字段名检查:确认BlogPage模型的日期字段确实是date,如果是其他名称(如post_date),需同步修改排序字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:31:15