在Flask中,如何重定向到被点击的个人资料?

时间:2018-06-27 04:06:09

标签: python html flask

我对Flask非常陌生。我有一个mysql数据库和一个模板。假设我有3张图片

 <a href="#"><div><img src= pathOfImage id="profile1"/></div></a>
 <a href="#"><div><img src= pathOfImage id="profile2"/></div></a>
 <a href="#"><div><img src= pathOfImage id="profile3"/></div></a>

每个图像的ID(profile1,profile2,profile3)是数据库中某些表的主键。我想要做的是通过使用主键查找该元组的相应属性的值。然后,将这些值从元组加载到模板。

而且,我在Python中具有以下代码:

 from flask import *
 @app.route("/")
 def index():
 return render_template("index.html")

 @app.route('/experts')
 def route1():
    return render_template("experts.html", data=data)

我上面给出的HTML代码段位于expert.html中。我几乎没有上面列出的SQL查询,在route1()中render_template的第二个参数上的数据是SQL元组,它生成所有这些图像和ID。

我尝试在图像旁边放置一个按钮,并给按钮赋予ID。然后,使用Ajax将id作为变量传递给python脚本,并获取SQL元组。

但是,这并不是困难的部分。困难的部分是制作新路线并加载内容。我尝试使用“ app.route”制作一条新路线,并将数据传递到render_template的第二个参数中。但是,它没有重定向到新的配置文件,并且甚至在我单击配置文件之前就调用了该方法。

以前,我使用按钮来检索ID:

 <html>
  <body>
    <a href="{{ url_for('route2') }}"> <button id='1'>Button1</button></a>
    <a href="{{ url_for('route2') }}"><button id='2'>Button2</button></a>
    <a href="{{ url_for('route2') }}"><button id='3'>Button3</button></a>
  </body>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"</script>
<script>
  $(document).ready(function() {
     $('button').click(function(event) {
       var the_id = event.target.id;
       $.ajax({
       url: "/get_id",
       type: "get",
       data: {the_id: the_id},
       success: function(response) {

      },
       error: function(xhr) {

    }
   });           
})});
</script>

然后,我用它们来生成一个新模板:

 import flask
 from flask import *
 from flaskext.mysql import MySQL

 @app.route("/")
 def index():
    return render_template("index.html")

 @app.route('/experts')
 def route1():
      return render_template("experts.html", data=data)

 @app.route('/get_id')
 @app.route('/profile')
 def route2():
      button_id '"' + flask.request.args.get('the_id') + '"'
      //some code here to get the tuples that I need "client_info" and 
      //"skill_info" variable below
      return render_template("profile.html", client_info=client_info, 
      skill_info=skill_info)

希望有人会重新开始。预先感谢!

2 个答案:

答案 0 :(得分:0)

0

...我猜是吗?也许?

答案 1 :(得分:-1)

您可以通过路由URL传递信息,而不必通过ajax传递信息。

experts.html

<a href="{{ url_for('route2') }}/profile1"><div><img src="pathOfImage"></div></a>
<a href="{{ url_for('route2') }}/profile2"><div><img src="pathOfImage"></div></a>
<a href="{{ url_for('route2') }}/profile3"><div><img src="pathOfImage"></div></a>

烧瓶路线

import flask
from flask import *
from flaskext.mysql import MySQL

@app.route("/")
def index():
    return render_template("index.html")

@app.route('/experts')
def route1():
    return render_template("experts.html", data=data)

@app.route('/profile/<id>')
def route2(id):
    # id variable contains user profile id string as per user click
    # depending on id set variables client_info and skill_info and render
    return render_template("profile.html", client_info=client_info, skill_info=skill_info)