2017-06-11 13 views
0

私はこれまでのところ、これを持っている: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&lt;p&gt;b&lt;/p&gt;\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)) 

を:

答えて

0

私はちょうどやってしまいました!問題は、本当に大きなファイルで問題になる可能性のあるファイルが読み込まれるまで待たないということです。しかし、彼らはかなり大きくなければならないようだ。誰かが実際の答えを持っている場合には、この質問を残しています(ファイルのアップロードには時間がかかりません)。また、私は、url_forの最下部のリダイレクトで 'view_post'を引用符で忘れていたので、私のエラーが起こっていました。

関連する問題