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

如何在页面展示最新4篇已发布博客?Django代码排查求助

问题分析与修复方案

核心问题总结

  1. 视图查询未过滤已发布的博客,且取数数量(3篇)不符合需求(4篇)
  2. 查询排序方式不规范,reverse()不如直接倒序排序直观
  3. 模板循环中引用了错误的变量(post.id应为latestpost.id)
  4. 可能存在视图与URL路由不匹配的情况,导致模板无法获取latest变量
  5. 模板中把已发布判断放在循环内,效率较低,应提前在查询中过滤

修复后的代码

1. Views.py 优化

将查询逻辑合并(或确保正确传递latest变量到模板),同时过滤已发布状态、按发布时间倒序、取最新4篇:

from django.utils import timezone
from .models import BlogPost

def blogTest(request):
    # 获取所有已发布博客(保留原有功能)
    posts = BlogPost.objects.filter(blog_published=True, blog_date__lte=timezone.now()).order_by('blog_date')
    # 获取最新4篇已发布博客
    latest = BlogPost.objects.filter(blog_published=True, blog_date__lte=timezone.now()).order_by('-blog_date')[:4]
    context = {'posts': posts, 'latest': latest}
    return render(request, 'blogtest.html', context)

# 若单独使用latestPosts视图,同步优化:
# def latestPosts(request):
#     latest = BlogPost.objects.filter(blog_published=True, blog_date__lte=timezone.now()).order_by('-blog_date')[:4]
#     return render(request, 'blogtest.html', {'latest': latest})

2. 模板(blogtest.html)修复

修正变量引用,简化逻辑(已在查询中过滤已发布,模板无需额外判断):

<div class="blog-post-container">
    <div class="row">
        <h1 id="lastest-blogs-title" style="text-align: center;">Latest Blogs</h1>
        {% for latestpost in latest %}
        <div class="col-md-4" id="bloggrid1">
            <hr>
            <div class="blog-post">
                <div class="blog-content">
                    <img class="blog-img" src="{{ latestpost.blog_image.url }}" alt="Blog image"/>
                    <h2 class="blog-title">{{ latestpost.blog_title }}</h2>
                    <hr id="blog-hr" style="width: 90%" />
                    <article class="blog-article">
                        <p>{{ latestpost.blog_article|truncatechars_html:265|safe }}</p>
                    </article>
                    <a href="{% url 'viewblog' latestpost.id %}" class="btn btn-secondary blog-button" type="button">Read More...</a>
                    <p class="blog-date">Posted on: {{ latestpost.blog_date }}</p>
                </div>
            </div>
        </div>
        {% empty %}
        <h3>No Blog Uploads</h3>
        {% endfor %}
    </div>
</div>

3. 额外检查点

  • 确认URL路由:访问的页面需对应blogTest(或latestPosts)视图
  • 检查数据库:确保存在blog_published=True且blog_date不晚于当前时间的博客
  • 验证viewblog路由:需正确定义并接受文章ID参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:40:32