Отобразить свободный текст между полями 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>
, или есть более простой способ?
Спасибо
Ответы
Ответ 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>')