Python : WTForms 필드를 초기화 할 때 자리 표시 자 속성을 추가 할 수 있습니까?
WTForms의 필드에 자리 표시 자 속성을 추가하고 싶습니다. 내가 어떻게 해?
abc = TextField('abc', validators=[Required(), Length(min=3, max=30)], placeholder="test")
위 코드는 유효하지 않습니다
값이있는 자리 표시 자 속성을 추가하려면 어떻게해야합니까?
WTForms 2.1 업데이트
이제 WTForms 2.1 (2015 년 12 월) render_kw=
부터 필드 생성자에 매개 변수를 사용하여 렌더링 키워드를 설정할 수 있습니다.
따라서 필드는 다음과 같습니다.
abc = StringField('abc', [InputRequired()], render_kw={"placeholder": "test"})
이것이 가능하지만 유의하십시오. 코드와 프리젠 테이션 사이의 경계를 연결하기 시작합니다. 그래서 현명하게 사용하십시오!
(이전 답변, WTForms 2.1 이전 버전의 경우 여전히 적용됨)
placeholder
WTforms 2.0.x 이하의 Python 생성자에서는 지원되지 않습니다.
그러나 템플릿에서 쉽게 수행 할 수 있습니다.
{{ form.abc(placeholder="test") }}
정답은 다음과 같습니다.
abc = TextField('abc', validators=[Required(), Length(min=3, max=30)], description="test")
문서에서 읽을 수 있듯이 :
description – A description for the field, typically used for help text.
그런 다음 템플릿에서 :
{% import 'forms.html' as forms %}
{% for field in form %}
{{ forms.render_field(field) }}
{% endfor %}
여기서 render_field는 forms.html에 정의 된 매크로입니다.
{% macro render_field(field) -%}
{% if field.type == 'CSRFTokenField' %}
{{ field }}
{% if field.errors %}
<div class="warning">You have submitted an invalid CSRF token</div>
{% endif %}
{% elif field.type == 'HiddenField' %}
{{ field }}
{# any other special case you may need #}
{% else %}
<div class="form-group">
<label for="{{ field.label.field_id }}" class="col-sm-2 control-label">{{ field.label.text }}</label>
<div class="col-sm-10">
{{ field(placeholder=field.description) }}
{% if field.errors %}
<div class="alert alert-danger" role="alert">
{% for err in field.errors %}
<p>{{ err|e }}</p>
{% endfor %}
</div>
{% endif %}
</div>
</div>
{% endif %}
{%- endmacro %}
My solution is use a custom widget:
from flask.ext.wtf import Form
from wtforms import StringField, validators
from wtforms.widgets import Input
class CustomInput(Input):
input_type = None
def __init__(self, input_type=None, **kwargs):
self.params = kwargs
super(CustomInput, self).__init__(input_type=input_type)
def __call__(self, field, **kwargs):
for param, value in self.params.iteritems():
kwargs.setdefault(param, value)
return super(CustomInput, self).__call__(field, **kwargs)
class CustomTextInput(CustomInput):
input_type = 'text'
class EditProfileForm(Form):
first_name = StringField('First name',
validators=[validators.DataRequired()],
widget=CustomTextInput(placeholder='Enter first name'))
Maybe it's not ellegant, but it allows to use Flask-Bootstrap and define your forms in the forms code, not in the template
ReferenceURL : https://stackoverflow.com/questions/9749742/python-wtforms-can-i-add-a-placeholder-attribute-when-i-init-a-field
'Development Tip' 카테고리의 다른 글
기본 클래스의 메서드 호출 (0) | 2020.12.29 |
---|---|
PHP : 값과 키가 다차원 배열에 존재하는지 확인 (0) | 2020.12.29 |
rbind 오류 : "이름이 이전 이름과 일치하지 않습니다" (0) | 2020.12.29 |
Java 기본 유형을 인수로 사용하여 리플렉션하여 메서드를 호출하는 방법 (0) | 2020.12.29 |
시간대없이 Now () (0) | 2020.12.29 |