簡體   English   中英

為動態數據中的 jinja 中的flask wtforms selectfield選擇默認值

[英]Select default value for flask wtforms selectfield within jinja for dynamic data

我正在嘗試為使用 html 頁面中的 jinja 的 for 循環動態生成的選擇字段設置默認值,但我無法在文檔中找到解決方案。 基本上,如果可能,我需要一種方法來使用 jinja 設置選擇字段的默認值。

我無法在 python 中從路由端或表單端設置默認值,因為這些字段是動態生成的,並且默認值需要根據選擇而不同。 如果我使用字符串字段而不是選擇字段,我可以設置默認值。

誰能幫我找到這個問題的解決方案? 我可以切換到不同的表單域來代替選擇域嗎?

第二個問題是,如果我將 id 和 name 設置為生成 html 頁面時的樣子,我是否可以構建和使用手動 html 字段,該字段在我提交時仍可與其他 wtform 字段一起使用? 如果可能的話,我可能有辦法以這種方式解決我的問題。

關於如何使用我想翻譯為選擇字段的字符串字段的代碼:

{% for d in data %}
{{ form.type.label(class="label") }}
{{ form.type(class="field", value=d.type) }}
{% endfor %}

謝謝

關於使用帶有動態數據的 WTForms 和 Jinja2 設置 SelectField 的默認值,您可以使用以下示例:

首先,在您的表單中定義 SelectField。

class MyForm(FlaskForm):
    country_id = SelectField("Country", coerce=int) #[('1','USA'),..])

然后查詢數據庫以構建可用值的列表。

@app.route("/...")
def country(): 
   form = MyForm()
   available_countries=db.session.query(Country).all()
   countries_list=[(i.id, i.name) for i in available_countries]
   form.country_id.choices = countries_list

最后在 html 中,使用 process_data 定義選定的值。 注意:不使用 z 變量。

{% set z = form.country_id.process_data(countryNameVariable) %}
{{ form.country_id(class="")}}

這是我能想到的唯一方法

你可以在你的views.py做這樣的事情

@app.route('/')
def index():
    data=[{'name':'red'}, {'name':'green'}, {'name':'blue'}]
    return render_template('index.html', data=data)

並在您的html模板中

<select name="colour" class="select-field">
    {% set default_value = 'green' %}
    {% for d in data %}
    <option value="{{ d.name }}" {% if d.name == default_value %}selected="selected"{% endif %}>{{ d.name }}</option>
    {% endfor %}
</select>

暫無
暫無

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

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