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

Django中Inclusion tags无法生效,侧边栏无内容显示

问题分析及解决方案

你的代码核心问题出在模板遍历逻辑错误,同时可能存在模型关联或标签库配置的隐性问题,以下是具体排查和修复步骤:

1. 核心逻辑错误:模板中遍历对象错误

你在sidebar_tags.py中返回的posts是Post.objects.all(),这是一个Post实例的集合(QuerySet),而模板中写{% for category in posts.categories.all %}是错误的——QuerySet本身没有categories属性,只有单个Post实例才有。

2. 修复方案(推荐直接查询分类模型)

步骤1:修改templatetags/sidebar_tags.py

如果你的项目中有Category模型,直接查询所有分类并统计对应文章数,效率更高:

from ..models import Category
from django import template
from django.db.models import Count

register = template.Library()

@register.inclusion_tag('blog/include/post-category.html')
def post_category():
    # 给每个分类添加文章数量统计
    categories = Category.objects.annotate(post_count=Count('posts'))
    return {'categories': categories}

注意:这里假设Post模型中categories字段的related_name设为posts,如果没设置,用post_set替代posts即可。

步骤2:修改post-category.html模板

遍历分类列表,显示分类名称和统计的文章数:

<div class="single-sidebar-widget post-category-widget">
    <h4 class="category-title">Post Categories</h4>
    <ul class="cat-list">
        {% for category in categories %}
        <li>
            <a href="#" class="d-flex justify-content-between">
                <p>{{ category.name }}</p>
                <p>{{ category.post_count }}</p>
            </a>
        </li>
        {% empty %}
        <li><p>暂无分类</p></li>
        {% endfor %}
    </ul>
</div>

3. 隐性问题排查

如果修复后仍不显示内容,检查以下几点:

  • 确保templatetags目录下有__init__.py空文件,否则Django无法识别标签库
  • 确认你的app已添加到settings.py的INSTALLED_APPS中
  • 检查Post和Category的关联是否正确,比如Post模型中:
    categories = models.ManyToManyField(Category, related_name='posts')
    
  • 确认数据库中存在Category和关联的Post数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:01:18