2009-09-09 4 views
1

Я хотел бы знать, как можно использовать автоматическую генерацию формы Джанго ...Пользовательской Django Form + Инлайн Сообщение об ошибках

<form action="/contact/" method="POST"> 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
</form> 

Для достижения следующего вывода (обратите внимание, пользовательское поле в середине формы и класс ошибки в оберточном div).

<form action="/contact/" method="POST"> 

    <div class="input error"> 
     <label for="id_subject">E-mail subject:</label> 
     <span>Error Message</span> 
    </div> 

    <div class="input error"> 
     <label for="id_message">Your message:</label> 
     <span>Error Message</span> 
    </div> 

    <!-- CUSTOM CONTAINER --> 
    <div class="custom-container"> 
     <h2>Custom Content</h2> 
    </div> 

    <div class="input error"> 
     <label for="id_sender">Your email address:</label> 
     <span>Error Message</span> 
    </div> 

    <div class="input error"> 
     <label for="id_cc_myself">CC yourself?</label> 
     <span>Error Message</span> 
    </div> 

    <div><input type="submit" value="Send message" /></div> 
</form> 

ответ

7

Методы Form.as_* - это в значительной степени просто строительные леса. Как только вы захотите сделать что-либо, просто перечислив поля в последовательной усадьбе, вы больше не сможете их использовать.

Используя некоторую логику в документации о reusable form templates, вы сможете достичь того, чего хотите.

+0

Я посмотрел шаблоны многоразовой формы, но в данном случае речь идет не о повторном использовании, а о настройке. Я в порядке с жесткой кодировкой, если я могу получить классы ошибок. – Eeyore

+1

Пример кода показывает, что вы хотите, чтобы пользовательский контейнер посередине, поэтому вы не можете полагаться на методы 'as_ *', поскольку вы * хотите * настроить настройки. Чтобы уточнить, в настоящее время нет способа выводить HTML одно поле, используя логику, содержащуюся в этих методах «строительные леса». – SmileyChris

4

Вы можете проверить django-uni-form, http://github.com/pydanny/django-uni-form, это поможет вам приблизиться к тому, что вы пытаетесь сделать с обертками.

Я согласен с SmileyChris в том, что вам будет трудно найти общий метод удобства, который позволит вам сделать так много.

Но между django-uni-form и разумным использованием widgets вы можете подобраться.

+2

django-uni-form имеет модуль компоновки, который отлично справляется с этой проблемой. – pydanny

Смежные вопросы