我遇到了从函数返回烧瓶重定向的问题。我可能遗漏了一些简单的东西,但真的很感激一些帮助。
这是我的views.py
from .tasks import get_stuff
from flask import render_template
@app.route('/get-stuff')
def get_stuff(stuff_name):
stuff = get_stuff(stuff_name)
return render_template('stuff.html', stuff=stuff)
这是我的函数,在tasks.py
中import os
from flask import redirect, request, url_for
def get_stuff(stuff_name):
if os.environ.get('SOME_VARIABLE') is None:
return redirect(url_for('some_url', next=request.url))
stuff = "Some stuff here"
return stuff
我的stuff.html
{% extends 'base.html' %}
{% block content %}
<div class="container-fluid">
<div class="row">
<div class="col-sm-12">
<h1 class="uppercase">{{ stuff }}</h1>
<hr>
</div>
</div>
</div>
{% endblock %}
因为没有设置SOME_VARIABLE,我希望它重定向到另一个页面,我将让用户设置SOME_VARIABLE。但这不会发生我得到<Response 241 bytes [302 FOUND]>
。任何帮助将不胜感激。
答案 0 :(得分:1)
但是你仍然在你的处理程序中调用return render_template
,无论调用任务的结果如何。如果是重定向,则需要直接返回该结果。
您可以从该任务中返回一个标志,告诉调用函数该做什么:
if os.environ.get('SOME_VARIABLE') is None:
return True, redirect(url_for('some_url', next=request.url))
stuff = "Some stuff here"
return False, stuff
并在处理程序中:
redirect, stuff = get_stuff(stuff_name)
if redirect:
return stuff
return render_template('stuff.html', stuff=stuff)
但实际上这太复杂了。你应该让任务返回完整的响应,无论发生什么 - 即在那里渲染模板,而不是在处理程序中 - 或将整个逻辑移动到处理函数中。
答案 1 :(得分:0)
从我看到的情况来看,您有两次定义get_stuff
功能,一次在tasks.py
,第二次在views.py
。
我注意到第二件事,你正在重新路由到/some_url
,而我没有看到你确实定义了这条路线。