Flask と Flask-WTF を使用しており、views.py
ファイルに次のコードがあります。
from flask import render_template, flash, redirect, url_for
from . import app, forms
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
form = forms.HelpSearch()
if form.validate_on_submit():
flash('Searched for: %s' % form.value.data)
redirect(url_for('help', form.value.data))
return render_template('index.html', title='Index', form=form)
@app.route('/help/<keyword>', methods=['GET', 'POST'])
def help(keyword=None):
form = forms.HelpSearch()
if form.validate_on_submit():
flash('Searched for: %s' % form.value.data)
redirect(url_for('help', keyword=form.value.data))
# This is just some dummy data for testing my template
keywords = ['n', 'north']
groups = ['movement']
syntax = [
{'cmd':"n", 'args': ''},
{'cmd':'north', 'args': ''}
]
content = 'Move north'
return render_template('show_help.html',
title=keyword,
form=form,
keywords=keywords,
groups=groups,
syntax=syntax,
content=content)
私が望んでいて期待しているのは、誰かがフォームの検索フィールドにテキストを入力して検索ボタンを押すと、その値が返され、適切なページにリダイレクトされることですfoo
。 /ふー。
残念ながら、フォーム検証ビットからのリダイレクトは、期待どおりにリダイレクトされません。現在のページをリロードしているように見えます。
flash
呼び出しが正しい情報で表示されるため、フォームがデータを取得して返すという事実を知っています。たとえば'Searched for: foo'
、キーワードをurl_for
ページに渡すと、単にリロードされます。手動で移動すると正常に/help/foo
動作します。
私はそれが機能していることをテストしました.printsurl_for
などのキーワードを手動で入力すると、必要に応じて適切なパスが作成されます。print url_for('help', keyword='foo')
/help/foo
希望どおりにリダイレクトされない理由を知っている人はいますか?
編集:誰かが正確に何が起こっているのかを見たい場合は、 Herokuで実行してください。