【发布时间】:2014-02-10 03:11:15
【问题描述】:
return redirect(url_for('index', var=var))
return render_template('index.html', var=var)
这两行本质上是一样的吗?
这两个函数有什么区别?
【问题讨论】:
return redirect(url_for('index', var=var))
return render_template('index.html', var=var)
这两行本质上是一样的吗?
这两个函数有什么区别?
【问题讨论】:
redirect 向浏览器返回一个 302 标头,其 Location 标头作为 index 函数的 URL。 render_template 返回 200,index.html 模板作为该 URL 的内容返回。
【讨论】:
在一个更简单的说明中,请考虑这一点 - 如果您的端点都没有呈现模板,并且您的所有重定向都指向应用程序中端点的 url,那么将没有任何东西可以呈现!
这就像为一个不会出现的地方指路。
【讨论】:
一个 URL 端点可以有许多不同的 render_template 语句,因此从您的模板文件夹呈现不同的页面模板。另一方面,使用重定向会更改 URL 本身,从而调用与该路由关联的方法。
【讨论】:
使用redirect()重定向到一个传递的URL相当于从客户端(浏览器)对redirect()方法中传递的URL传递一个GET请求,因此会导致执行传入的URL的“查看”功能,一般情况下,最后我们有一个“返回语句”,通过render_template返回Html页面(模板),最终将Html页面传递给客户端浏览器。
而render_template 仅将 Html 页面及其所有其他参数传递给客户端浏览器,之后不会执行“视图”功能。
【讨论】: