2014-09-06 22 views
1

我一直在處理一個表單,它將數據發送到一個刮板並同時從表單輸入中生成一個URL。返回的模板完美無瑕,但URL更改最終給了我URL中的整個表單,我無法弄清楚原因。將表單放入URL

的URL最後應該是這樣的:

http://localhost/options/%3Cinput%20id%3D%22symbol%22%20name%3D%22symbol%22%20type%3D%22text%22%20value%3D%22%22%3E 

我想它看起來就像這樣:

http://localhost/options/ABC 

Form類:

class OptionsForm(Form): 
    symbol = StringField('Enter a ticker symbol:', validators=[Required(), Length(min=1, max=5)]) 
    submit = SubmitField('Get Options Quotes') 

瀏覽:

# Where the form data ends up 
@app.route('/options/<symbol>', methods=['GET', 'POST']) 
def options(symbol): 
# Created this try/except so I could test functionality - for example, I can do 'localhost/options/ABC' and it works 
    try: 
     symbol = request.form['symbol'] 
    except: 
     pass 
    return render_template('options.html', symbol=symbol, company_data=OS.pull_data(symbol, name=True)) 

# Where the form lives 
@app.route('/', methods=['GET', 'POST']) 
def index(): 
    form = OptionsForm() 
    print(form.errors) 
    if form.validate_on_submit(): 
     return redirect(url_for('options', symbol=form.symbol.data)) 
    return render_template('index.html', options_form=form) 

模板:

<div id="options_div"> 
<form method="POST" name="symbol_form" action="{{ url_for('options', symbol=options_form.symbol) }}"> 
    {{ options_form.hidden_tag() }} 
    {{ options_form.symbol(size=10) }} 
    {{ options_form.submit(size=10) }} 
</form> 

任何幫助,將不勝感激。

回答

0

嘗試將enctype='multipart/form-data'添加到表單標記。它看起來像你的表格使用默認值application/x-www-form-urlencoded

編輯好吧,看看這個。當您的模板呈現時,該數據屬性中沒有值(在url_for調用中)。當不引用數據屬性時(如你原來的問題所示),你引用了實際的表單元素(這就是爲什麼你可以看到所有的html在url中傳遞)。這裏是你的選擇(即我見):

  1. 使用某種類型的前端的JavaScript來表單的action屬性綁定到輸入框中的值。像角這樣的東西會對此有所幫助(但如果你不使用任何其他功能,則是矯枉過正)。

  2. 只需將表單POST到/ options(URL中沒有符號)。然後,從表單數據中獲取符號屬性。

+0

只是給了一個鏡頭,它仍然給我的亂碼網址。不過謝謝你的想法。 – brohemian 2014-09-06 23:30:46

+0

嗯,也許它必須在url_for調用中使用symbol = options_form.symbol。我以前沒有使用WTForms,但也許它需要像symbol = options_form.symbol.text或.value或其他東西 – pgorsira 2014-09-06 23:35:36

+0

試過這樣(在WTForms中它是.data)。當我這樣做時,帶有表單本身的頁面(索引視圖)將不會加載 - 它給了我一個werkzeug.routing.BuildError消息。任何其他想法?無論哪種方式,再次感謝您花時間考慮這一點。 – brohemian 2014-09-06 23:44:11