簡體   English   中英

如何在wtforms Flask中覆蓋名稱

[英]how to overwrite name in wtforms Flask

new.html

{{ form.particular(name='particular[]') }}

我嘗試使用上面的代碼在輸入字段中分配名稱,但出現以下錯誤。 但是,如果我添加一個類或id來替換名稱(例如:{{form.particular(id ='particulars')}}),則可以,但不適用於名稱,只會輸出以下錯誤:

builtins.TypeError
TypeError:html_params()為關鍵字參數“名稱”獲得了多個值

任何解決方案。 先感謝您 :)

如果它通過渲染模板發送表單數據,則只需將變量名放在{{var_name}}之間的模板中,並在代碼中在返回渲染模板函數中使用此var_name。

定義表單時:

class WebForm(FlaskForm):
    particular = StringField('some_description')

然后,您將擁有一個name=particular specific的字段,這是wtforms的基礎功能。 因此,當您嘗試執行form.particular(name='particular[]')時,由於無法在jinja2模板中重新定義名稱,因此會出現多值錯誤。

您可以通過以下兩種方式之一覆蓋名稱(請注意,在jinja2渲染發生之前,兩者都是服務器端的):

1)靜態地:即定義一個新名稱:

class WebForm(FlaskForm):
    particular_new = StringField('some_description')

2)動態:即包裝函數創建一個修改后的靜態形式:

def WebForm(new_name):
    class TempForm(FlaskForm):
        pass
    setattr(TempForm, new_name, StringField('some_description'))
    return TempForm()
# will create a WebForm with attribute name of 'new_name' as StringField

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM