2017-03-29 52 views
0

전체 테이블 행을 HTML로 처리 할 수 ​​없기 때문에 url_for로 JavaScript에 URL을 만들어야합니다.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 사용할 수 없습니다.

다른 주제에서는 Post로 변수를 보낼 수 있지만 사용자에게 친숙하기 때문에 URL 시스템을 변경하고 싶지 않습니다.

아마도 url_for (/ some/page/0)로 더미 URL을 만든 다음 JavaScript로 해당 문자열을 변경할 수는 있지만이 방법이 가장 좋을지 모르겠습니다.

편집 : 내 방법은 다음과 같이이다 : last_orders의 요소가 xxx_page 기능 (들)에 사용되는 접두사가 포함되어있는 경우

$(".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

는, 당신은 단지 tda 태그를 만들 수 있습니다.

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

편집 : 질문을 다시 읽어 후에는 전체 셀의 클릭을 만들기 위해 찾고. 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'); 
    }); 

은 또는 당신이 주소로 td 요소에 데이터 요소를 설정할 수 있습니다 (그리고 나는 처음보다 훨씬 덜이 옵션을 좋아한다).

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

청취자의 경우 click에서이 작업을 수행하십시오.

window.location.href = $(this).attr('data-url');