2016-07-14 76 views
1

在電影評級應用程序中,我想用動態數量的字段在燒瓶中生成WTF表單。即如果有三部電影,則會有三個字段。Flask中的動態表格

我想到了幾個選項,但他們沒有工作:

class RatingForm(Form): 
    rating = TextField("rating",[validators.Length(min=1, max=1)]) 
    movie_order=TextField("movie",[validators.Length(min=1, max=1)]) 
    submit = SubmitField("submit rating") 
  1. 參數傳遞給窗體對象 - 我不知道怎樣才能將參數傳遞給這種類

  2. 在模板內部創建一個循環,從而生成並返回多個表單,並選擇正確的表單。這也不起作用,因爲request.form是immutableDict,並且最終有多個字段具有相同的密鑰,我無法訪問它。

    {% for movie in movies_to_rate %} 
        <p> 
        <form method="POST" enctype="multipart/form-data" action="/rate"> 
        {{ movie}} 
        {{ forms[movie].rating}} 
        {{ forms[movie].submit }} 
        <input type="submit" value="Go"> 
    
    </p> {% endfor %} 
    

約我能做些什麼什麼想法嗎?

+0

您可以通過[這]完全動態控制(http://wtforms.readthedocs.io/en/latest/specific_problems .html#dynamic-form-composition),但我不知道是否沒有更好的解決方案來解決您的問題。 – syntonym

+0

@syntonym謝謝,但我一直在尋找更多與瓶子有關的東西... – Shgidi

+0

一個瘋狂的猜測,但你可以傳遞一個表單實例列表到模板? – iScrE4m

回答

0

我想你可以生成TextField的列表作爲類成員而不是使用一個字段對象。 (雖然它看起來有點不可思議,我認爲你的校驗是你的意思。)

class RatingForm(Form): 
    def __init__(self, count): 
     self.ratings = [TextField("rating_" + str(i), [validators.Length(min=1, max=1)]) 
        for i in range(count)] 
     ...