2009-07-15 2 views

Antwort

21
<form> 
    {% for field in form %} 
      {{ field.label }}: {{ field.value }} 
    {% endfor %} 
</form> 

einen Blick hier Form fields und Working with forms

+0

Danke - ich hatte .label gesehen, aber nicht .initial. Seltsamerweise wird .initial nicht einmal im Dokument "Arbeiten mit Formularen" erwähnt. – ine

+0

.initial funktioniert nur beim ersten Mal das Formular präsentiert wird, oder? Zum Beispiel, wenn es Fehler gibt und Sie das Formular erneut präsentieren, wird es keine Initiale in meiner Erfahrung geben. – dfrankow

+0

In der Django-Terminologie funktioniert dies nur mit ungebundenen Formularen. Was ist, wenn Sie möchten, dass es sowohl mit ungebundenen als auch mit gebundenen Formularen funktioniert? – dfrankow

3

Sie können auch ein neues Widget verwenden: Ich habe das so, dass ich ein Widget haben könnte, die eine Textanzeige eines Datums erstellt, und eine versteckte Form mit das gleiche Datum darin, also könnte es für den Benutzer sichtbar sein, aber sie können es nicht ändern.

Hier ist eine erste (noch/Prüfung bereinigt werden) Version:

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 

Sie dann dies als (widget=DayLabelWidget,) auf dem Gebiet verwendet werden.

5

Auch vergessen Sie nicht, dass Sie auch {{myform.instance.name}}

+0

was ist das? Wo ist es dokumentiert? – dfrankow

+0

form.instance gibt das Objekt zurück, das die gebundene Form darstellt. Es ist in der Dokumentation hier: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean-method Ich sollte auch erwähnen, dass dies nur mit Modellformen funktioniert – priestc

+0

ah, Google App-Engine unterstützt ModelForm nicht, daher verwenden wir Form. – dfrankow

2

Warum nicht tun können {{field.data}}?

+0

Weil es in Ansichten nicht in Vorlage (in Vorlage ist Schleife) getan werden soll –

11

altes Thema, aber ich denke, einige Leute immer noch hier kommt.

Sie können wie diese auch etwas tun:

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 '-' 

Und in Ihrem Formular

class SomeForm(Form): 
    somename = forms.CharField(widget=PlainTextWidget) 
Verwandte Themen