Flask重定向功能返回不起作用

时间:2016-11-05 10:31:30

标签: python flask

我遇到了从函数返回烧瓶重定向的问题。我可能遗漏了一些简单的东西,但真的很感激一些帮助。

这是我的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]>。任何帮助将不胜感激。

2 个答案:

答案 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,而我没有看到你确实定义了这条路线。