Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在html中使用python flask路由_Python_Html_Json_Database_Flask - Fatal编程技术网

如何在html中使用python flask路由

如何在html中使用python flask路由,python,html,json,database,flask,Python,Html,Json,Database,Flask,所以我在做一个使用蟒蛇瓶和sqlalchemy的项目 我们有一个充满契约的DataTable,其主要id为contract\u id。我想我们有两个不同的选项来显示契约 备选案文1。 我们有一个通用的view_contract.html模板,它向flask上的应用程序路由发出post请求,并返回要在页面上显示的合同的json。然而,我不太喜欢这个想法,因为这样你就不能复制和粘贴某些合同链接到其他人,因为它将是相同的通用网页url 备选案文2。 我们在flask中有一个应用程序路由@app.rou

所以我在做一个使用蟒蛇瓶和sqlalchemy的项目

我们有一个充满契约的DataTable,其主要id为contract\u id。我想我们有两个不同的选项来显示契约

备选案文1。 我们有一个通用的view_contract.html模板,它向flask上的应用程序路由发出post请求,并返回要在页面上显示的合同的json。然而,我不太喜欢这个想法,因为这样你就不能复制和粘贴某些合同链接到其他人,因为它将是相同的通用网页url

备选案文2。 我们在flask中有一个应用程序路由@app.routeContact//view,我们查询数据库以显示特定的contract\u id。但是,我只知道如何使用flask.jsonify在python中显示数据。如何在url中生成html

tldr:

如何生成一个网页(如contract/112431/view),以html形式加载id为112431的合同。到目前为止,我只能使用python来实现,这不允许我生成任何我想要的html表单或细节

这是我现在拥有的。。。如何将html添加到此页面,使其适用于每个合同

@app.route('/contract/<contract_id>/profile')
def view_suitor_profile(contract_id):
    cs = Contract.query.filter(Contract.contract_id == contract_id).all()
    cs_list = []
    for c in cs:
        con = {
            "con id": c.contract_id,
            "lcat" : c.lcat,
            "desired skills" : c.desired_skill,
            "mandatory skills" : c.mandatory_skill,
            "location" : c.work_location
        }
        c_list.append(con)
    return flask.jsonify(c_list=c_list)

这是选项2的一个示例

在创建数据列表的视图中,不应将其作为json返回,而应使用数据呈现模板

return flask.render_template("template.html",
                             c_list=c_list)
在html中,可以循环浏览列表并提取所有元素

<div>
   {% for entry in c_list %}
      <p> Contract: </p>
      <p>{{ entry }}</p>
   {% endfor %}
</div>
然后,您可以尝试从{{entry}元素中提取更多细节,方法是尝试类似{entry.lcat}的内容

这允许您创建一个html模板,在调用render_template时,该模板将填充您传递给它的数据。因此,只要您想要相同的布局,但数据不同,这是一种方法

选项1 使用AJAX。它很容易实现

选择2 简单合同

@app.route('/simple/<contract_id>/page', methods=['GET', 'POST'])
def contracts(contract_id):
    result = dbs.Contracts.select().where(dbs.Contracts.id == contract_id).first()
    return render_template('contracts.html', result=result)
contracts.html

<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>simple contracts</title>
</head>
<body>
{% if result %}
    {% for contract in result %}
        {{ contract.id }} <br/>
        {{ contract.name }} <br/>
        {{ contract.price }} <br>

{#  annotation: `contract` type object, have access in methods/attributes ex namedtuple  in jinja templates
    ex: in python: somelist = {'id': 12, 'name': 'contractIBM', 'price':1223 }
            access: somelist['id']

    in jinja: somelist.id => 12
            somelist.name => contractIBM etc...
#}
    {% endfor %}
{% endif %}

{#for send DATA in route use ahref args link or forms#}
<a href="{{ url_for('contracts', contract_id=123) }}"> Get info contract 123</a>


</body>
</html>

你说我只能用python来做是什么意思?如果你想要一个HTML页面,你必须写一些HTML。我在我使用的东西中添加了一些代码。我想知道如何发送数据并为每个url加载一个html模板,其中包含合同id。据我所知,html是静态的,所以当你转到blahblah.html时它会被加载。那么,每次我知道我可以使用js进行调用时,如何将html模板加载到具有不同ID的动态url中,但这会使每个合同的url保持不变。我希望url不同,以便人们可以共享指向特定合同的链接合同id主键id还是另一个id?渲染模板是否不会更改url?我目前没有访问测试的权限,这就是我提出此问题的原因。我以前用过,但我不记得它是否改变了url不,它没有。url在@route decorator中定义。render_模板只意味着获取一个html文件+数据,创建一个html页面,然后将该页面发送回用户。因此,返回您现在发送的JSON数据和新方法的唯一区别在于,新方法将是html格式的页面,而不是JSON文本!感谢您的解释,以及以上和超越!