使用Flask url_for动态构建URL的最佳方法

时间:2017-03-29 16:35:48

标签: python flask url-for

我必须使用url_for在JavaScript中创建一个URL,因为我应该使用整个表行作为链接,我无法在HTML中执行此操作。以下示例:

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

和Flask:

@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更改该字符串,但我不确定这种方法是否最佳。

编辑:我的方法是这样的:

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

1 个答案:

答案 0 :(得分:0)

如果last_orders的元素包含xxx_page函数中使用的前缀,那么您只需在a中制作td标记。

<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');
    });

OR(我喜欢这个选项比第一个选项少得多)你可以在td元素上设置一个带有地址的数据元素。

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

然后在你的click听众中,做到这一点。

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