在两个Flask路线之间传递(或“持续”)对象?

2024-09-29 23:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试将在一个路由(/index)上生成的对象传递给另一个路由(/ello),这样我就不必进行重复的查询了。在

对象是在/index路由上生成的。。。在

@app.route('/',methods=['GET'])
def index(x=None,y=None):
        persons = Person.query.filter(Person.id != current_user_person_id).all()
        person1 = random.choice(persons)
        person2 = random.choice(persons)
        x,y = pair_generator(person1,person2)

    return render_template('index.html',x=x,y=y)

。。。并在/ello路径上操作:

^{pr2}$

以下是index.html的相关部分:

<form action="{{url_for('ello')}}" method="post">
  <input type="submit" name="nickname" value="{{x.nickname}}"  />
  <input type="hidden" name="winner_id" value="{{x.id}}"  />
  <input type="hidden" name="winner_score" value="{{x.score}}"  />
  <input type="hidden" name="loser_id" value="{{y.id}}"  />
  <input type="hidden" name="loser_score" value="{{y.score}}"  />
</form>
<form action="{{url_for('ello')}}" method="post">
  <input type="submit" name="nickname" value="{{y.nickname}}"  />
  <input type="hidden" name="winner_id" value="{{y.id}}"  />
  <input type="hidden" name="winner_score" value="{{y.score}}"  />
  <input type="hidden" name="loser_id" value="{{x.id}}"  />
  <input type="hidden" name="loser_score" value="{{x.score}}"  />
</form>

如您所见,我查询Person表两次。有可能在路线之间传递物体吗?(或者以某种方式“坚持”它们?)这样,我就可以允许/ello路由访问和操作在/index中创建的两个人对象。在

真的,我想做这样的事情:

<form action="{{url_for('ello', winner_object=x, loser_object=y)}}" method="post">
  <input type="submit" value="{{x.nickname}}"  />
</form>
<form action="{{url_for('ello', winner_object=y, loser_object=x)}}" method="post"
  <input type="submit" value="{{y.nickname}}"  />
</form>

。。。但这当然传递字符串,而不是对象:

http://127.0.0.1:5000/ello?  
winner_object=<app.Person+object+at+0x1062b1290>&loser_object=<app.Person+object+at+0x1062b1490>

Tags: nameformidinputindexobjectvaluetype

热门问题