2017-03-29 13 views
0

JavaScriptでurl_forを使用してURLを作成する必要があります。これは、HTMLで行えないリンクとしてテーブル行全体を使用する必要があるためです。FlaskでURLを動的に構築するための最良の方法url_for

{% for x in last_orders %} 
<tr id="x"> 
    <td>something here</td> 
    <td>something here</td> 
</tr> 
{% endfor %} 

、フラスコ:以下のサンプル

@app.route("/some/page/<int:id>/", methods=['POST', 'GET']) 
def xxx_page(id): 

私はjQueryの関数.clickを(使用してリンクのようなテーブルの行を作ることができる)が、この方法で私は、適切な方法でなurl_for使用することはできません。

投稿で変数を送信できることがわかりましたが、これはユーザーフレンドリーなので、私のURLシステムを変更したくありません。

url_for(/ some/page/0)でダミーURLを作成し、その文字列をJavaScriptで変更することはできますが、この方法が最適であるかどうかはわかりません。

編集:私の方法で、このようなものです:

$(".row").click(function() { 
    var id = $(this).attr("id"); 
    var where = `{{ url_for('xxx_page', id=0) }}`; 
    where = where.slice(0,-2).concat(id + "/"); 
    window.location = where; 
    }); 

答えて

0

last_ordersの要素がxxx_page機能(複数可)で使用される接頭辞が含まれている場合は、あなただけのtdaタグを作ることができます。

<td><a href={{ url_for('{}_page'.format(x)) }}>something here</a></td> 

EDIT:あなたの質問を再読み込みした後、あなたは全体の細胞クリッカブルを作るために探している。 JavaScriptにはいくつかのオプションがあります。すべてのtd要素のクリックを聞き取り、その子のクリックを誘発することができますa

# Don't actually use an anonymous function. Define it elsewhere. 
$('body').off('click.order') 
    .on('click.order', 'td', function(e) { 
     $(this).find('a').trigger('click'); 
    }); 

OR(と私は最初のものよりもはるかに少ないこのオプションを好む)あなたがアドレスを持つtd要素のデータ要素を設定することができます。

<td data-url='{{ url_for('{}_page'.format(x)) }}'>something here</td> 

あなたのclickリスナーでは、これを行います。

window.location.href = $(this).attr('data-url'); 
関連する問題