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