使用Flask / Jinja渲染未定义的角度变量

时间:2017-04-26 01:07:45

标签: python angularjs flask jinja2

看似没有理由我的angular $ scope变量没有在浏览器中呈现。我的整个项目一直很好,直到我今天创建这个页面。所有其他页面仍然按预期工作。我已将我的所有代码删除到只有变量本身,并使用以下代码并将其仍然呈现为[undefined]。

我正在使用python / flask通过jinja模板引擎提供应用程序,因此更改了角度的插值字符,因此它们不会与jinja中的相同字符冲突:

var zues = angular.module('zues', []);
zues.config(['$interpolateProvider', function($interpolateProvider) {
    $interpolateProvider.startSymbol('{{[');
    $interpolateProvider.endSymbol(']}}');
}]);

控制器:

zues.controller('test', ['$scope', '$http', function($scope, $http){
    $scope.test123 = "testing123";
}]);

HTML:

<body ng-app="zues" ng-controller="test">

{{[ test123 ]}}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
<script src="/static/assets/js/zues.js"></script>
<script src="/static/assets/js/Controllers/test.js"></script>

python / flask路线:

from flask import Flask, render_template
import flask
application = Flask(__name__)
@application.route("/test")
def test():
    return render_template('test.html')
if __name__ == "__main__":
    application.run(host='127.0.0.1', reloader_type='stat', debug=True)

这在浏览器中呈现为:

[未定义]

我原以为它会呈现:

是testing123

我只是忽略了一些简单的东西?

2 个答案:

答案 0 :(得分:0)

我明白了。我为角度选择的插值字符与Jinja默认使用的字符过于密切相关。 Jinja正在使用{{[test123]}}并将方括号解释为纯文本,然后尝试在我的python脚本中找到一个不存在的变量test123。

这似乎没有打破项目的其余部分,因为我在项目其余部分的html模板中使用的角度变量总是绑定到其他东西,因此被摘要循环观察,而在这种情况下它只会被插值一次。

我将插值字符更改为{[{test123}]},以便Jinja永远不会捕获它而只有角度。

答案 1 :(得分:0)

一些快速变化应该会有所帮助。

1)摆脱插值提供者。 如果您完成2&amp; 3以下。

2)关闭控制器定义时,取下关闭括号]

  • 你的:}]);
  • 我的:});

3)在大括号之前和'}之后添加 {{'}}

示例/ {{'{{someVariable +“”+ anotherVariable}}'}}