Редактирование Django _form.as_p
По умолчанию _form.as._p выплевывает:
<p><label for="id_subject">Subject:</label>
<input id="id_subject" type="text" name="subject" maxlength="100" /></p>
В то время как мне нужно
<p><label for="id_subject">Subject:</label><p>
<input id="id_subject" type="text" name="subject" maxlength="100" /></p>
с разрывом между меткой и входом. Как я могу изменить свой код Django для этого?
Ответы
Ответ 1
Вы просто просто не можете использовать form.as_p
больше. Если настройки по умолчанию не работают для вас, вы должны визуализировать их вручную:
<form action="/contact/" method="post">
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><input type="submit" value="Send message" /></p>
</form>
Смотрите документы: https://docs.djangoproject.com/en/dev/topics/forms/#looping-over-the-form-s-fields
Ответ 2
Если вам просто нужен перерыв, тогда нет необходимости менять код Django. Просто используйте CSS для стиля label
как display: block
.
Ответ 3
Переопределите as_p в классе формы.
class MyForm(forms.Form):
def as_p(self):
"Returns this form rendered as HTML <p>s."
return self._html_output(
normal_row = u'<p%(html_class_attr)s>%(label)s</p> %(field)s%(help_text)s',
error_row = u'%s',
row_ender = '</p>',
help_text_html = u' <span class="helptext">%s</span>',
errors_on_separate_row = True)
Ответ 4
Довольно то, что описывает Брайан выше. Я бы написал новый метод для вашей формы, например as_myp. Я сделал это для себя. Я взял метод as_table и сделал as_plain для удаления tr/th разметки. Пример.
class MyForm(forms.Form):
my_field1 = forms.CharField(...)
my_field2 = forms.WhateverField(...)
def as_myp(self):
"Returns this form rendered as HTML <p>s."
return self._html_output(
normal_row = '<p%(html_class_attr)s>%(label)s</p> <p>%(field)s%(help_text)s</p>',
error_row = '%s',
row_ender = '</p>',
help_text_html = ' <span class="helptext">%s</span>',
errors_on_separate_row = True)
def as_plain(self):
"Returns this form rendered as HTML <tr>s -- excluding the <table></table>."
return self._html_output(
normal_row = '%(label)s%(errors)s%(field)s%(help_text)s',
error_row = '%s',
row_ender = ' ',
help_text_html = '<br /><span class="helptext">%s</span>',
errors_on_separate_row = False)
Мне просто показалось, что это проще сделать, чем написать файл шаблона и обработать поле формы формы с ошибками, тегами, видимыми/скрытыми и т.д.
Ответ 5
Шаблон:
<div id="my_form">
{{ form.as_p }}
</div>
CSS
#my_form p label,
#my_form p input{
float: left;
clear: left;
}
Итак, если вы добавляете поля, вы все равно можете использовать form.as_p