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

Django Template中for循环无法展示数据库分类数据问题求助

Django模板循环渲染分类数据失效修复

代码存在3个核心问题,按以下步骤修复即可正常展示分类:

1. 路由配置冲突,分类视图从未执行

urls.py中两个视图绑定了完全相同的空路径'',Django路由按注册顺序从上到下匹配,所有根路径请求都会被第一个注册的home视图拦截,category视图完全不会触发,查询出的分类数据根本不会传递到模板层。
修复后的路由配置:

# urls.py
app_name = 'statenews'
urlpatterns = [
    path('', views.home, name="home"),
    # 给分类页分配独立路由,禁止和其他路由重复
    path('category/', views.category, name='category'),
]

2. 模板变量语法书写错误

Django模板输出变量的标准语法是双大括号包裹{{ 变量名 }},你的代码里错误使用了小括号包裹({category.name}),属于语法错误,即使拿到数据也无法正常渲染分类名称。
修复后的模板片段:

<div class="col-lg-3 col-md-6 mb-5">
    <h4 class="font-weight-bold mb-4">Tags</h4>
    {% for category in categories %}
    <div class="d-flex flex-wrap m-n1">
        <!-- 修正变量语法,移除错误的小括号 -->
        <a href="" class="btn btn-sm btn-outline-secondary m-1">{{ category.name }}</a>
    </div>
    {% endfor %}
</div>

3. 公共组件上下文传递逻辑错误

partials/footer.html是全站复用的局部模板,通常会被首页、新闻详情页等多个页面通过{% include %}引入,被引入的局部模板和父模板共享上下文。你当前只在category视图中传递了categories变量,访问首页时走home视图逻辑,上下文里没有分类数据,for循环自然没有内容输出。
根据业务场景选以下一种方案修复即可:

  • 如果只需要在首页footer展示分类:直接在home视图中补充分类查询逻辑,把categories传到首页模板上下文即可,被引入的footer可以直接读取到这个变量,示例代码:
def home(request):
    # 保留原有首页业务逻辑
    news_list = News.objects.filter(is_published=True)
    # 补充分类查询
    categories = Category.objects.all()
    return render(request, 'home.html', {
        'news_list': news_list,
        'categories': categories
    })
  • 如果需要全站所有页面的footer都展示分类:配置全局模板上下文,把分类查询逻辑放到公共上下文处理器中,所有模板无需单独传参即可直接读取categories变量,避免每个视图重复写相同的查询代码。

内容的提问来源于stack exchange,提问作者Carlos Eduardo Vieira Martins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:18:16