私はこれまでのところ、これを持っている:Flask:送信後に投稿ビューにリダイレクトするにはどうすればいいですか?
@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
あなたが見ることができるように、私はそれを送信したときに、私の/提出ルートに指示し、フォームを、持っています。このルートは、新しい投稿ファイルを作成し、投稿の内容を投稿します。次に、最近作成された投稿を見ることができるように、ビューの投稿ルートにリダイレクトする必要があります。このルートをロードしようとする前に、投稿がファイルへの書き込みを終了するまで待つ必要があります。 whileループでこれを処理しようとしたことがわかります。しかし、今のエラーが表示さ:
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オブジェクトの内容が表示されます。作品
@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))
を: