Отображение некоторого свободного текста между полями формы Django - PullRequest
12 голосов
/ 08 апреля 2009

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

class MyForm(Form):

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

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

  #foobar data
  foobar = ChoiceField()

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

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

Есть ли способ указать 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>, или есть более простой способ?

Спасибо

Ответы [ 8 ]

14 голосов
/ 10 ноября 2009

Один из способов сделать это без отображения формы в шаблоне с использованием 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: я понимаю, что этот ответ опоздал, и я уверен, что вы уже решили эту проблему, но я думаю, что это должно быть полезно для тех, кто только сталкивается с этим сейчас.

9 голосов
/ 14 мая 2009

Если вы хотите настроить форму, вам не нужно отображать ее 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 голосов
/ 08 апреля 2009

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

2 голосов
/ 08 апреля 2009

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

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

1 голос
/ 11 января 2010

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

in forms.py :

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

в forms.html :

  • {{form.myField.help_text}}
0 голосов
/ 24 мая 2015

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

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

$('.selector').append('<html></html>')
0 голосов
/ 27 июля 2010

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

0 голосов
/ 08 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...