Ответ 1
<form>
{% for field in form %}
{{ field.label }}: {{ field.value }}
{% endfor %}
</form>
Посмотрите здесь Поля формы и Работа с формами
Есть ли простой способ сделать Django render {{myform.name}}
как
John Smith
вместо
<input id="id_name" name="name" value="John Smith" />
внутри тегов <form>
? Или я об этом ошибаюсь?
<form>
{% for field in form %}
{{ field.label }}: {{ field.value }}
{% endfor %}
</form>
Посмотрите здесь Поля формы и Работа с формами
Старая тема, но я думаю, что некоторые люди все еще приходят сюда.
Вы можете сделать что-то вроде этого тоже:
from django.utils.safestring import mark_safe
class PlainTextWidget(forms.Widget):
def render(self, _name, value, _attrs):
return mark_safe(value) if value is not None else '-'
И в твоем виде
class SomeForm(Form):
somename = forms.CharField(widget=PlainTextWidget)
Под Django 2. 1+ вам понадобится следующее:
from django.utils.safestring import mark_safe
class PlainTextWidget(forms.Widget):
def render(self, name, value, attrs=None, renderer=None):
return mark_safe(value) if value is not None else '-'
Кроме того, не забывайте, что вы также можете сделать {{myform.instance.name}}
Вы также можете использовать новый виджет: я сделал это, чтобы иметь виджет, который создал текстовое отображение даты, и скрытую форму с той же датой в ней, чтобы он мог быть видимым пользователю, но они не могут его изменить.
Вот начальная (все еще проверяемая/подлежащая очистке) версия:
class DayLabelWidget(forms.Widget):
def render(self, name, value, attrs):
final_attrs = self.build_attrs(attrs, name=name)
if hasattr(self, 'initial'):
value = self.initial
if type(value) == type(u''):
value = datetime.date(*map(int, value.split('-')))
return mark_safe(
"%s" % value.strftime("%A (%d %b %Y)")
) + mark_safe(
"<input type='hidden' name='%s' value='%s' />" % (
name, value
)
)
def _has_changed(self, initial, data):
return False
Затем вы используете это в поле как (widget=DayLabelWidget,)
.
Почему бы не использовать {{field.data}}?
Я думаю, что это то, что вы хотите: http://code.djangoproject.com/ticket/10427
Я проложил свое джанго и вуаля...