以 javascript 变量作为参数的 Flaskr url_for 对 python 不起作用
Flaskr url_for with javascript variable as parameters is not working to python
我正在尝试将 Flask 与 url_for 一起使用。问题是,当我尝试使用 javascript 变量的值启动警报时,一切似乎都正常,但是当我尝试使用 url_for 启动警报时,不会打印变量的内容。我做错了什么?或者我的代码中缺少什么?
如何将 JavaScript 变量传递给 url_for 函数?
html代码:
<a class="dissable_user_btn" data-user_id="{{user.id}}" href="#" title="Change Status"><i class="fa fa-plug"></i>
</a>
JS代码:
<script type="text/javascript">
$(document).ready(function(){
$('.dissable_user_btn').click(function( event ) {
var user_id = $(this).data("user_id")
alert(user_id) //everything ok
alert ('{{url_for('.dissable', _id=user_id)}}'); //dont print the valur of user_id
</script>
简短回答:你不能。 Flask 和 Jinja2 在服务器端呈现模板 (例如,Flask 正在翻译所有 {{ }}
发送 HTML 到网络浏览器之前的东西)。
对于这样的 URL,您需要在 javascript 中手动构建一个变量作为路径的一部分。如果这是一个 XHR 端点,我建议使用 GET/POST 将值传输到服务器,这是比以这种方式构建 URL 更好的最佳实践。 这样你就可以使用Jinja了:
$(document).ready(function(){
var baseUrl = "{{ url_for('disable') }}";
$('.dissable_user_btn').click(function(event) {
var user_id = $(this).data("user_id");
// first part = url to send data
// second part = info to send as query string (url?user=user_id)
// third parameter = function to handle response from server
$.getJSON(baseUrl, {user: user_id}, function(response) {
console.log(response);
});
});
});
我找到了另一个解决方案。当我需要使用 space.
传递变量时,我的问题就开始了
首先我创建了一个函数来删除尾随和前导 spaces
function strip(str) {
return str.replace(/^\s+|\s+$/g, '');}
之后,我使用函数编码了 URL
<script type="text/javascript">
$(document).ready(function(){
$('.dissable_user_btn').click(function( event ) {
var user_id = $(this).data("user_id")
alert(user_id)
user_id = strip(user_id).replace(" ","%20");
alert ('{{url_for('.dissable', _id='user_id')}}.replace('user_id',user_id);
</script>
它对我来说非常好!
这就是我解决问题的方式
<script>
function strip(str) {
return str.replace(/^\s+|\s+$/g, '');}
$(document).ready(function() {
$('#exportcountry').click(function() {
var elemento = document.getElementById("countryexportbtn");
var country = strip(elemento.textContent).replace(" ","%20");
$('#exportevent').load("{{ url_for('get_events',country = 'pais') }}".replace('pais',country));
});
});
</script>
我正在尝试将 Flask 与 url_for 一起使用。问题是,当我尝试使用 javascript 变量的值启动警报时,一切似乎都正常,但是当我尝试使用 url_for 启动警报时,不会打印变量的内容。我做错了什么?或者我的代码中缺少什么?
如何将 JavaScript 变量传递给 url_for 函数?
html代码:
<a class="dissable_user_btn" data-user_id="{{user.id}}" href="#" title="Change Status"><i class="fa fa-plug"></i>
</a>
JS代码:
<script type="text/javascript">
$(document).ready(function(){
$('.dissable_user_btn').click(function( event ) {
var user_id = $(this).data("user_id")
alert(user_id) //everything ok
alert ('{{url_for('.dissable', _id=user_id)}}'); //dont print the valur of user_id
</script>
简短回答:你不能。 Flask 和 Jinja2 在服务器端呈现模板 (例如,Flask 正在翻译所有 {{ }}
发送 HTML 到网络浏览器之前的东西)。
对于这样的 URL,您需要在 javascript 中手动构建一个变量作为路径的一部分。如果这是一个 XHR 端点,我建议使用 GET/POST 将值传输到服务器,这是比以这种方式构建 URL 更好的最佳实践。 这样你就可以使用Jinja了:
$(document).ready(function(){
var baseUrl = "{{ url_for('disable') }}";
$('.dissable_user_btn').click(function(event) {
var user_id = $(this).data("user_id");
// first part = url to send data
// second part = info to send as query string (url?user=user_id)
// third parameter = function to handle response from server
$.getJSON(baseUrl, {user: user_id}, function(response) {
console.log(response);
});
});
});
我找到了另一个解决方案。当我需要使用 space.
传递变量时,我的问题就开始了首先我创建了一个函数来删除尾随和前导 spaces
function strip(str) {
return str.replace(/^\s+|\s+$/g, '');}
之后,我使用函数编码了 URL
<script type="text/javascript">
$(document).ready(function(){
$('.dissable_user_btn').click(function( event ) {
var user_id = $(this).data("user_id")
alert(user_id)
user_id = strip(user_id).replace(" ","%20");
alert ('{{url_for('.dissable', _id='user_id')}}.replace('user_id',user_id);
</script>
它对我来说非常好!
这就是我解决问题的方式
<script>
function strip(str) {
return str.replace(/^\s+|\s+$/g, '');}
$(document).ready(function() {
$('#exportcountry').click(function() {
var elemento = document.getElementById("countryexportbtn");
var country = strip(elemento.textContent).replace(" ","%20");
$('#exportevent').load("{{ url_for('get_events',country = 'pais') }}".replace('pais',country));
});
});
</script>