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

Jinja2 UndefinedError:Flask模板调用get_products_by_category函数失败

排查Jinja2 UndefinedError: 'get_products_by_category'未定义的问题

核心原因

该错误的本质是:模板index.html中调用的get_products_by_category函数,未被Flask应用传递到模板的上下文环境中,导致Jinja2无法识别这个函数。

具体排查步骤

1. 确认函数已在后端定义

检查app.py(或对应的业务逻辑文件)中是否实现了get_products_by_category函数,示例实现如下:

from flask import Flask, render_template
from models import Product, Category  # 假设模型定义在models.py中

app = Flask(__name__)

# 实现按分类查询商品的函数
def get_products_by_category(category_id):
    return Product.query.filter_by(category_id=category_id).all()

2. 确保函数已传入模板上下文

有两种方式将函数传递给模板,任选其一即可:

  • 方式一:路由中直接传入
    在渲染index.html的路由函数里,把函数作为参数传给render_template:
    @app.route('/')
    def index():
        categories = Category.query.all()
        return render_template(
            'index.html',
            categories=categories,
            get_products_by_category=get_products_by_category
        )
    
  • 方式二:全局上下文注册
    如果多个模板都需要用到该函数,可通过上下文处理器全局注册:
    @app.context_processor
    def inject_global_functions():
        return dict(get_products_by_category=get_products_by_category)
    

3. 检查模板调用语法

确认index.html中调用函数的语法无拼写、大小写错误,示例正确调用:

{% for category in categories %}
  <h3>{{ category.name }}</h3>
  {% for product in get_products_by_category(category.id) %}
    <div class="product-card">
      <p>{{ product.name }}</p>
      <p>{{ product.price }}</p>
    </div>
  {% endfor %}
{% endfor %}

4. 排查导入与作用域问题

  • 如果函数定义在其他文件(如utils.py),需在app.py中正确导入:
    from utils import get_products_by_category
    
  • 确认函数不在局部作用域内(比如嵌套在其他函数内部),否则无法被模板访问。

内容的提问来源于stack exchange,提问作者Ananyaa S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:22:07