Ale*_*ley 1 jquery url-routing jinja2 flask
设置url_for()在Jinja2的模板的是非常简单的(只要它在HTML).我一直在尝试从JQuery内部设置它,如下所示:
<script>
function my_func(key) {
var newHref = sprintf("{{url_for('fig', selector='%s')}}", key);
$('#my_id').attr('href', newHref);
}
<script>
Run Code Online (Sandbox Code Playgroud)
其中sprintf仅仅是jQuery的一个标准的字符串格式化功能.
现在什么都没发生.
我也用onClick功能代替了它href.它看起来像这样:
function my_Clicked(key) {
$.ajax({
type: 'GET',
url: sprintf("{{ url_for('fig', selector = '%s')}}", key)
});
}
Run Code Online (Sandbox Code Playgroud)
再次,<button>单击时没有任何反应.
这甚至可能吗?Jinja2/Flask标记{{ }}似乎只出现在HTML中,并在加载页面时进行处理.但是,我不明白为什么在页面加载后设置动态URL是不可能的,因此当您单击它时,请求只会被发送回服务器.
编辑 使用odai alghamdi建议的扩展后,我遇到了一个令人困惑的问题.
我正在进行onClickAJAX调用<button>.它现在看起来像这样:
function cropzoneClicked(key) {
$.ajax({
type: 'GET',
url: flask_util.url_for('fig', {selector:key})
});
}
Run Code Online (Sandbox Code Playgroud)
但是,单击按钮时没有任何反应.我知道正在调用该函数,因为我可以在那里发出警报.但是,没有任何内容被呈现,'GET'请求也没有返回成功的回调
这里有一个例子,我从来没有真正考虑过需要url_for从用户界面访问,但是知道如何做是很好的.当您单击按钮时,它将使用该id键作为键,url_for并在警告框中显示生成的URL.
flask
git://github.com/dantezhu/flask_util_js.git
Run Code Online (Sandbox Code Playgroud)
然后将它们安装pip install -r requirements.txt到virtualenv中.
from flask import Flask, render_template
from flask_util_js import FlaskUtilJs
app = Flask(__name__)
fujs = FlaskUtilJs(app)
@app.context_processor
def inject_fujs():
return dict(fujs=fujs)
@app.route('/')
def home():
return render_template('example.html')
@app.route('/foo/<something>/')
def something(something):
return 'Alright then {}'.format(something)
if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
{{ fujs.js }}
<script>
$( document ).ready(function(){
$("button").on("click", function() {
var $button = $( this );
var url = flask_util.url_for('something', {something: $button.attr('id') });
alert(url);
});
});
</script>
</head>
<body>
<button id="button_a">First!</button>
<button id="button_b">Second!</button>
<button id="button_c">Third!</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)