如何在文本输入中使用 field.label 作为默认值
how to use field.label as default value in a text-input
我正在使用 python、flask、jinja 制作表单,我正在遍历字段列表以呈现输入,一切正常。
我正在尝试使用 field.label 属性作为输入框中的默认值,这样我就不需要它们旁边的标签,而是我得到的实际标签(对于输入中带有标签 = search_term) <label for=
的字段,旁边是 Search Term">
...
如果我将 {{field.label}}
放在其他任何地方,它会正确显示字段标签,如果我使用 field.name
作为值,它工作正常 - 为什么它仅在 [= 的上下文中表现得很奇怪16=]?
谢谢!
JINJA2
{% for field in form if not field.name =="csrf_token" %}
<tr>
{% if field.type == "SubmitField" %}
<td class="col-6 pr-3"> </td>
<td class="col-6 text-left pl-3">{{form.submit(class="w-50 btn btn-outline-info") }} </td>
{% elif field.type == "BooleanField"%}
<td class="col-6 text-right pr-3">{{ field.label}}</td>
<td class="col-4 text-left">{{ field (class="col-6 text-center")}}</td>
{% elif field.type == "SelectMultipleField" %}
<td class="col-6 text-right pr-3">What are you searching for? <br /><span class="small"> ctrl-click for multiple </span></td>
<td class="text-left pl-3">{{ field(class="col-6 text-center") }}</td>
{% else %}
<td class="col-6 text-right pr-3">{{ field.label }}</td>
<td class="col-6 text-left">{{ field (class="col-6 text-center", value=field.label)}}</td>
{% endif %}
</tr>
{% endfor %}
{{ field (class="col-6 text-center", value=field.label)}}
上述代码出现错误结果的原因是 field.label
本身字符串化为 HTML 代码,而不仅仅是文本。您正在尝试将 HTML (包括引号)作为值包含在内生成的 HTML 会被破坏,看起来像:
<input value="<label for="search">"> <!-- Invalid HTML! -->
从WTForm's documentation我们可以看到label
有text
属性,这会给你标签的纯文本。
这样的事情会给你想要的结果:
{{ field (class="col-6 text-center", value=field.label.text)}}
此外,您是否正在寻找 placeholder
属性而不是 value
?
<h2>Using 'value'</h2>
<input type=text value="Search Term"> Note that you have to delete the text first...
<h3>vs</h3 <br>
<h2>Using 'placeholder'</h2>
<input type=text placeholder="Search Term">
我正在使用 python、flask、jinja 制作表单,我正在遍历字段列表以呈现输入,一切正常。
我正在尝试使用 field.label 属性作为输入框中的默认值,这样我就不需要它们旁边的标签,而是我得到的实际标签(对于输入中带有标签 = search_term) <label for=
的字段,旁边是 Search Term">
...
如果我将 {{field.label}}
放在其他任何地方,它会正确显示字段标签,如果我使用 field.name
作为值,它工作正常 - 为什么它仅在 [= 的上下文中表现得很奇怪16=]?
谢谢!
JINJA2
{% for field in form if not field.name =="csrf_token" %}
<tr>
{% if field.type == "SubmitField" %}
<td class="col-6 pr-3"> </td>
<td class="col-6 text-left pl-3">{{form.submit(class="w-50 btn btn-outline-info") }} </td>
{% elif field.type == "BooleanField"%}
<td class="col-6 text-right pr-3">{{ field.label}}</td>
<td class="col-4 text-left">{{ field (class="col-6 text-center")}}</td>
{% elif field.type == "SelectMultipleField" %}
<td class="col-6 text-right pr-3">What are you searching for? <br /><span class="small"> ctrl-click for multiple </span></td>
<td class="text-left pl-3">{{ field(class="col-6 text-center") }}</td>
{% else %}
<td class="col-6 text-right pr-3">{{ field.label }}</td>
<td class="col-6 text-left">{{ field (class="col-6 text-center", value=field.label)}}</td>
{% endif %}
</tr>
{% endfor %}
{{ field (class="col-6 text-center", value=field.label)}}
上述代码出现错误结果的原因是 field.label
本身字符串化为 HTML 代码,而不仅仅是文本。您正在尝试将 HTML (包括引号)作为值包含在内生成的 HTML 会被破坏,看起来像:
<input value="<label for="search">"> <!-- Invalid HTML! -->
从WTForm's documentation我们可以看到label
有text
属性,这会给你标签的纯文本。
这样的事情会给你想要的结果:
{{ field (class="col-6 text-center", value=field.label.text)}}
此外,您是否正在寻找 placeholder
属性而不是 value
?
<h2>Using 'value'</h2>
<input type=text value="Search Term"> Note that you have to delete the text first...
<h3>vs</h3 <br>
<h2>Using 'placeholder'</h2>
<input type=text placeholder="Search Term">