Я хочу создать твитер-бутстрап, соответствующий форме. Согласно docs for Twitter Bootstrap v2.2.2 (версия в комплекте с web2py) HTML, должен выглядеть следующим образом:Создать повторяющиеся поля пользовательской формы в web2py?
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="inputEmail">Email</label>
<div class="controls">
<input type="text" id="inputEmail" placeholder="Email">
</div>
</div>
...
Я в настоящее время использую SQLFORM
, который выводит HTML, который не очень подходит с этим (даже при использовании formstyle='divs'
). Кроме того, я хочу, чтобы мой вывод html был чистым без артефактов web2py, таких как class="w2p_fl"
. Поэтому я думал использовать пользовательскую форму. Однако при этом будет много повторяющегося кода. То есть в каждом поле необходимо будет повторить следующее.
{{=form.custom.begin}}
<div class="control-group">
{{=LABEL(form.custom.label['myfield'], _class='control-label',
_for='mytable_myfield')}}
<div class="controls">{{=form.custom.widget.myfield}}</div>
</div>
...
{{=form.custom.end}}
Так как я могу повторить вышеописанную блок кода, так что я мог бы заменить его чем-то вроде {{= bootstrap_field (db.mytable.myfield)}} или какой-либо другой способ придерживаться DRY?
Что такое способ web2py для этого? Создать функцию просмотра? Передавать функцию в словаре, возвращаемом контроллером? Создайте свой собственный html-помощник? Создайте собственный виджет? Другой путь?
Отлично! Странный стиль формы «bootstrap» нигде в документации, которую я могу найти. Также я увидел, что formleyle может быть вызван в документации: 'formstyle также может быть функцией, которая принимает (record_id, field_label, field_widget, field_comment) как атрибуты и возвращает объект TR(). Но поскольку он сказал' TR' и Мне не нужен стол, который я понял, что он не может делать то, что я хотел. – User
Все в моем ответе недокументировано. Текст, который вы процитировали из книги, устарел - это все равно будет работать, но теперь вы можете передать вызываемый код, который генерирует всю форму DOM, а не только отдельные объекты TR (код рамки проверяет вашу функцию для определения будь то унаследованный тип или новый тип, исходя из того, сколько аргументов требуется - если он принимает 4 аргумента, он предполагает, что это устаревшая функция). – Anthony
Также меня все равно интересует более буквальный ответ на мой вопрос о том, как обрабатывать повторяемый блок кода (кроме функции formstyle), если у вас есть ответ для редактирования. – User