Я не знаю другого пути в простом Джанго. Ярлыки типа form.field
или form.as_p
действительно помогают вам начать работу, но в конце концов вы можете использовать простой HTML. Вот как я это вижу. Не сказать, что нет необходимости в большем контроле над рендерингом. Я помню, как читал эту дискуссию о рендеринге форм в списке рассылки Django.
Саймон Виллисон работает над библиотекой, чтобы предоставить дизайнерам больше контроля, ее источник можно найти на github . Это немного старше, так что может даже не работать. Но что касается вашего вопроса, этот пример выглядит как полезный для вас:
{% field form.name class="myclass" %}
<!-- renders as -->
<input type="text" name="name" id="id_name" class="myclass">
На самом деле эта функция должна быть легко достижимой. Вам нужен тег шаблона, который принимает поле формы, обновляет атрибуты виджетов (те, которые вы уже можете установить в форме) и визуализируете поле.
Итерация по форме дает экземпляры BoundField
, которые визуализируются с помощью метода __unicode__
. Вам нужно будет передать все ключевые аргументы в функцию визуализации виджетов. Черновик этой идеи:
@register.simple_tag
def field(boundfield, **kwargs):
if self.field.show_hidden_initial:
return self.as_widget(attrs=kwargs) + self.as_hidden(only_initial=True)
return self.as_widget(attrs=kwargs)