Flask:提交后如何重定向到帖子视图?
Posted
技术标签:
【中文标题】Flask:提交后如何重定向到帖子视图?【英文标题】:Flask: How to redirect to the post view after it has been submitted? 【发布时间】:2017-11-13 08:38:26 【问题描述】:到目前为止我有这个:
@app.route('/view/<postname>')
def view_post(postname):
posts_folder = os.path.abspath(os.path.join(app.root_path, 'content', 'posts'))
filename = safe_join(posts_folder, postname)
with open(filename, 'rb') as f:
content = f.read()
html = markdown.markdown(content)
return render_template("view.html",html=html,postname=postname)
class PostForm(FlaskForm):
postTitle = StringField('postTitle', validators=[DataRequired()])
postText = TextAreaField('postText',validators=[DataRequired()])
@app.route('/submit', methods=('GET', 'POST'))
def submit():
postname = request.form["postTitle"]
print postname
posts_folder = os.path.abspath(os.path.join(app.root_path, 'content', 'posts'))
filename = safe_join(posts_folder, postname)
with open(filename,'wb') as f:
f.write(request.form['postText'])
while True:
if os.path.exists(filename):
return redirect(url_for(view_post(postname)))
break
else:
pass
如您所见,我有一个表单,当它提交时,它指向我的 /submit 路由。此路由创建一个新的帖子文件并将帖子的内容写入其中。然后,它应该重定向到查看帖子路由,以便它可以看到最近创建的帖子。在尝试加载此路由之前,它需要等到帖子完成对文件的写入。你可以看到我试图在 while True 循环中处理这个问题。但是,现在错误显示:
BuildError: Could not build url for endpoint u'<!DOCTYPE html>\n<html>\n<p>b</p>\n<br>\n<a href="/edit/a">\n a\n </a>\n\n<html>'. Did you mean 'edit_post' instead?
好像 url_for(view_post(postname)) 以某种方式试图查看原始 html。但是,当我打印 postname 时,它会打印 postTitle 对象的内容,这是我打算保存并重新路由到的文件名。
【问题讨论】:
【参考方案1】:我最终只是做了:
@app.route('/submit', methods=('GET', 'POST'))
def submit():
postname = request.form["postTitle"]
print postname
posts_folder = os.path.abspath(os.path.join(app.root_path, 'content', 'posts'))
filename = safe_join(posts_folder, postname)
with open(filename,'wb') as f:
f.write(request.form['postText'])
return redirect(url_for('view_post', postname=postname))
这行得通!问题是它不会等到文件加载,这对于真正的大文件来说可能是个问题。但似乎它们必须相当大。虽然我会留下这个问题,以防有人有实际答案(假设文件上传确实需要相当长的时间)。我的错误也发生了,因为我忘记了底部 url_for 重定向中“view_post”周围的引号
【讨论】:
以上是关于Flask:提交后如何重定向到帖子视图?的主要内容,如果未能解决你的问题,请参考以下文章