Подтвердить что ты не робот

Отобразить свободный текст между полями Django Form

У меня есть следующая форма:

class MyForm(Form):

  #personal data
  firstname = CharField()
  lastname = CharField()

  #education data
  university = CharField()
  major = CharField()

  #foobar data
  foobar = ChoiceField()

Так как некоторые поля (например, foobar) заполнены из базы данных, я не могу использовать другой метод, отличный от того, чтобы позволить Django отображать его для меня с помощью form.as_ul

Также мне жаль, что мне не нужно разделить форму в нескольких формах для облегчения mantainance

Есть ли способ сообщить Django отобразить текст справки между этими разделами формы, чтобы я мог ввести некоторые инструкции о том, как заполнить форму?

Я бы хотел, чтобы форма выглядела примерно так:

<form>

  <p>Here you enter your personal data...</p>
  <input name='firstname'>
  <input name='lastname'>

  <p>Here you enter your education data...</p>
  <input name='university'>
  <input name='major'>

</form>

Мне нужно создать свой собственный виджет, чтобы отображать теги <P>, или есть более простой способ?

Спасибо

4b9b3361

Ответ 1

Один из способов сделать это без отображения вашей формы в шаблоне с помощью form.as_ul - с помощью django-uni-form. Сначала вам нужно скачать здесь и установить его. Тогда код для настройки формы может выглядеть примерно так:

from uni_form.helpers import FormHelper, Submit, Layout, Fieldset

class MyForm(Form):

    #personal data
    firstname = CharField()
    lastname = CharField()

    #education data
    university = CharField()
    major = CharField()

    #foobar data
    foobar = ChoiceField()

    # now attach a uni_form helper to display the form
    helper = FormHelper()

    # create the layout
    layout = Layout(
         # first fieldset
         Fieldset("Here you enter your personal data...",
             'firstname', 'lastname'),
         Fieldset("Here you enter your education data...",
             'university', 'major'),
         Fieldset('foobar')

    # and add a submit button
    sumbit = Submit('add', 'Submit information')
    helper.add_input(submit)

Теперь, чтобы отобразить это в вашем шаблоне, вы сделаете следующее:

{% load uni_form %}
{% with form.helper as helper %}
    {% uni_form form helper %}
{% endwith %}

Это выводит HTML (примерно) следующим образом:

<form>
<fieldset><legend>Here you enter your personal data...</legend>
<input name='firstname'>
<input name='lastname'>
</fieldset>

<fieldset><legend>Here you enter your education data...</legend>
<input name='university'>
<input name='major'>
</fieldset>

<fieldset>
<input name='foobar'>
</fieldset>

</form>

Для получения дополнительной информации о uni_form прочитайте их документы (см. ссылку выше).

PS: Я понимаю, что этот ответ задерживается, и я уверен, что вы уже решили эту проблему, но я думаю, что это должно быть полезно для всех, кто только сейчас сталкивается с этим.

Ответ 2

Если вы хотите настроить форму, вам не нужно ее отображать form.as_ul. Django знает, как сделать foobar, если вы правильно настроили модель формы... попробуйте... не беспокойтесь.

Посмотрите, какой питон на сервере отправил вашу страницу. Например, если он отправил форму django следующим образом:

return respond(request, user, 'templateName', { 'myform':myform })

то templateName.html будет иметь:

<blockquote>
<form>

    <p>Here you enter your personal data...</p>
    {{myform.firstname }}

    <p>Here you enter your education data...</p>
    {{myform.university }}

    <p> a choice field </p>
    {{myform.foobar}}

</form>
</blockquote>

Ответ 3

Поскольку каждый раздел представляет собой набор из нескольких независимых полей формы, я рекомендую использовать шаблон пользовательской формы. Это дает вам полный контроль над компоновкой с минимальной дополнительной работой. Django Настройка шаблона формы docs имеют подробную информацию.

Ответ 4

Помните также, что объект Django Form представляет собой просто набор полей; нет необходимости в соотношении 1:1 между тегами формы HTML и объектами Django Form. Если различные разделы формы фактически логически разделены, вы можете рассмотреть возможность разбиения на три формы, которые затем можно было бы отобразить в своем шаблоне любым HTML-кодом, который вы хотите между ними (но все же в одном теге HTML-формы).

Независимо от того, является ли это разумным решением, вы, безусловно, немного поработаете над дизайном своего приложения и представления.

Ответ 5

В формах, которые вы знаете, есть поле help_text.

в forms.py:

  • myField = forms.myFieldType(help_text="Helping friendly text to put in your form", otherStuff=otherStuff)

в forms.html:

  • {{form.myField.help_text}}

Ответ 6

Несмотря на то, что ваша форма заполняется из базы данных, вы все равно сможете вручную выписать форму или использовать шаблон. Подробнее см. документацию Django.

Ответ 7

Для тех, кто находится в аналогичной ситуации с автором, я рекомендую вернуться к CSS и псевдоселекторам :before и/или :after либо в элементах input, либо в label формы. Они работают так же хорошо и могут сделать вашу жизнь намного легче, поскольку вы все еще можете использовать {{ form.as_p }}.

Ответ 8

согласен с @mipadi, кажется, это самый простой способ.

Так что-то вроде

$('.selector').append('<html></html>')