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

使用AngularJS ng-repeat渲染表格遇Flask UndefinedError问题求助

解决Flask与AngularJS模板语法冲突导致的UndefinedError: 'r' is undefined问题

嘿,这个问题我之前也碰到过!核心原因是Flask默认的Jinja2模板引擎和AngularJS的模板语法撞车了——两者都用{{ }}作为变量插值的标记。当Flask渲染index.html的时候,会把AngularJS的{{r.TCID}}当成Jinja2的变量去解析,但此时你的Flask视图函数并没有把r这个变量传给模板,所以就抛出了UndefinedError。

下面给你两种简单的解决办法,还有额外的检查要点:

方法1:自定义AngularJS的插值符号

直接修改AngularJS的变量标记,避开和Jinja2的冲突。比如把{{ }}改成[[ ]]:

首先在你的AngularJS代码里配置插值符号:

// 初始化Angular模块
var myApp = angular.module('myApp', []);

// 自定义插值标记
myApp.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');
});

然后把HTML里的表格代码改成:

<table>
    <tr data-ng-repeat="r in regResults">
        <td>[[r.TCID]]</td>
    </tr>
</table>

方法2:用Jinja2的raw标签保护Angular代码

如果你不想改Angular的语法,可以用Jinja2的{% raw %}标签把Angular的模板代码包裹起来,告诉Flask不要解析这段内容:

<table>
{% raw %}
    <tr data-ng-repeat="r in regResults">
        <td>{{r.TCID}}</td>
    </tr>
{% endraw %}
</table>

额外需要确认的点

除了语法冲突,还要确保AngularJS的逻辑是正确的:

  • 页面已经正确引入了AngularJS库,并且你的模块(比如myApp)已经绑定到了DOM上(比如在<html>标签加ng-app="myApp")
  • 对应的控制器已经正确初始化,并且在Ajax请求成功后,把API返回的数据赋值给了$scope.regResults。举个例子:
myApp.controller('ResultController', function($scope, $http) {
    // 调用Flask的REST API
    $http.get('/api/your-endpoint')
        .then(function(response) {
            // 把返回的数据赋值给scope变量,供ng-repeat使用
            $scope.regResults = response.data;
        })
        .catch(function(err) {
            console.log('请求失败:', err);
        });
});

记得在表格的父元素上加上ng-controller="ResultController",让Angular能找到对应的变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:30:09