2013-09-30 91 views
0

我有一個接受任意數量的書籍及其作者的HTML表單。我試圖將相應的書籍和作者分組,以便在用戶提交表單時可以輕鬆地解析服務器。我嘗試使用HTML字段集,但我不確定這是否是正確的方法。在Flask中分組HTML輸入字段

當我提交表單到服務器有中沒有字段集的概念瓶的request.form

這裏的HTML表單:

<form action="/save/" method="POST"> 

    <fieldset> 
     <input name="author" value="Mark Twain" class="author" type="text"> 
     <input name="book" value="The Adventures of Tom Sawyer" class="book" type="text">   
    </fieldset> 

    <fieldset> 
     <input name="author" value="Henry David Thoreau" class="author" type="text"> 
     <input name="book" value="Civil Disobedience" class="book" type="text">   
    </fieldset> 

    <!--More books and authors here possibly--> 

    <button type="submit">Save</button> 

</form> 

這裏就是我的服務器上看到當我登錄request.form

ImmutableMultiDict([('book', u'The Adventures of Tom Sawyer'), ('book', u'Civil Disobedience'), ('author', u'Mark Twain'), ('author', u'Henry David Thoreau')]) 

你可以看到,服務器接收數據沒有任何形式的字段集或分組的概念。

有沒有更好的方法來分組個別書籍及其相應的作者?我寧願在HTML中完成所有這些工作,而不是涉及jQuery/JSON/AJAX。

回答

1

不,不幸的是這是不可能的。提交給某個字段的唯一數據是其名稱和值。雖然Flask處理表單數據的方式(名稱不影響處理)通常比PHP(其中像author[some_id]這樣的名稱將創建數組)更好,但這是您需要手動處理的少數情況之一。

最簡單的方法是使用像author-IDtitle-ID這樣的名稱,然後遍歷字段,從鍵中提取ID和實際名稱。

+0

對於我如何維護服務器看到的圖書順序,您有什麼建議嗎?我可以使用您建議的方法,但是當我登錄request.form時,書籍/作者的順序不會被維護。 – Raj

+0

你不能。數據存儲在MultiDict中,並像所有不保存順序的字典一樣。無論如何依靠現場訂單並不是一個好主意。 – ThiefMaster

+3

其實@Raj有可能保存順序,你只需要使用['ImmutableOrderedMultiDict'](http://werkzeug.pocoo.org/docs/datastructures/#werkzeug.datastructures.ImmutableOrderedMultiDict)作爲你的後備存儲['request_class'](http://flask.pocoo.org/docs/api/#flask.Flask.request_class)。有關更多詳細信息,請參見[此答案](http://stackoverflow.com/a/18189963/135978) –