Deform 2.0: добавление заполнителя HTML5

Я пытаюсь добавить атрибут заполнителя HTML5 в Deform 2.0 TextInputWidget. Однако я не уверен, следует ли это поддерживать или как это должно поддерживаться, поскольку документация не очень ясна по этому поводу - кажется, есть некоторая функция mask_placeholder, которая не является тем, что я хочу.

Как добавить заполнитель HTML5 для ввода текста Deform (2.0+)?


person Mikko Ohtamaa    schedule 24.06.2015    source источник


Ответы (1)


РЕДАКТИРОВАТЬ: Начиная с Deform 2.0.7, атрибуты HTML5 поддерживаются.

https://docs.pylonsproject.org/projects/deform/en/latest/changes.html


Хорошо — хитрость в том, чтобы иметь собственный шаблон — шаблоны Deform еще не поддерживали заполнитель:

<!--! This adds placeholder attribute support for TextInput.

 -->

<span tal:define="name name|field.name;
                  css_class css_class|field.widget.css_class;
                  oid oid|field.oid;
                  mask mask|field.widget.mask;
                  mask_placeholder mask_placeholder|field.widget.mask_placeholder;
                  style style|field.widget.style;
                  placeholder field.widget.placeholder|nothing;
                  type field.widget.type|'text';
"
      tal:omit-tag="">
    <input type="${type}" name="${name}" value="${cstruct}"
           tal:attributes="class string: form-control ${css_class};
                           style style;
                           placeholder placeholder;"
           id="${oid}"/>
    <script tal:condition="mask" type="text/javascript">
      deform.addCallback(
         '${oid}',
         function (oid) {
            $("#" + oid).mask("${mask}",
                 {placeholder:"${mask_placeholder}"});
         });
    </script>
</span>

И тогда вы можете определить свой виджет как:

class InviteFriends(CSRFSchema):

    email = c.SchemaNode(
        c.String(),
        missing=None,
        validator=c.Email(),
        widget=w.TextInputWidget(template="textinput_placeholder", type="email", placeholder="Friend's email"),
    )

    phone_number = c.SchemaNode(
        c.String(),
        missing=None,
        validator=c.Length(min=7),
        widget=w.TextInputWidget(template="textinput_placeholder", type="tel", placeholder="Friend's phone number"),
    )
person Mikko Ohtamaa    schedule 24.06.2015