解決jinja2和angular的花括號{{}}衝突的方法。

一共3個方法,html

A、http://flask-triangle.readthedocs.org/en/develop/tutorial/part1.htmlpython

上代碼flask

app.pyapp

from flask import Flask, render_template
from flask.ext.triangle import Triangle

    app = Flask(__name__, static_path='/static')
    Triangle(app)

    @app.route('/')def index():
        return render_template('index.html')if __name__ == '__main__':
        app.run()

templates/index.html:ide

<!DOCTYPE html>
 <html data-ng-app>
 <head>
 <meta charset="utf-8">
 <script src="/static/js/angular.min.js"></script>
 <title>Flask-Triangle - Tutorial</title>
 </head>
 <body>
 <label>Name:</label>
 <input type="text" data-ng-model="yourName" placeholder="Enter a name here">
 <hr>
 <h1>Hello {{yourName|angular}}!</h1>
 </body>
 </html>


B、C都是這裏的:http://lorenhoward.com/blog/how-to-get-angular-to-work-with-jinja/this

B、經過 verbatim 來暫停jinja2的解析spa

{% raw %}
<h1 class="user-name">{{ user.name }}</h1>
{% endraw %}

C、修改angular的符號code

On the front end, after instantiating our Angular app, we can tell Angular to look for different binding tags (instead of '{{' and '}}'). htm

var app = angular.module('myApp', []);

app.config(['$interpolateProvider', function($interpolateProvider) {
  $interpolateProvider.startSymbol('{[');
  $interpolateProvider.endSymbol(']}');
}]);

The above code snippet tells angular to look for '{[' as a an opening tag, and ']}' for a closing tag.blog

Now we can use both Angular and Jinja together at the same time:

<h1 class="{{ some_class }}">{[ foo.bar ]}</h1>

As one can see, the h1 element's class will be rendered in the backend via Jinja and Flask / Django.  When it's sent to the browser, it might look like this:

<h1 class="some-class">{[ foo.bar ]}</h1>

From there, Angular will see that '{[ foo.bar ]}' should be a binding and will update the view accordingly.


個人項目用angular比較少,因此我選擇了B。

相關文章
相關標籤/搜索