Wie zeige ich den Wert einer Django-Formularfeld im template?
Ich habe ein Formular mit einer E-Mail-Eigenschaft.
Bei der Verwendung {{ form.email }}
im Falle einige Fehler bei der überprüfung, Django, noch macht Sie den vorherigen Wert in das input-tag das Attribut "value":
<input type="text" id="id_email" maxlength="75" class="required"
value="[email protected]" name="email">
Will ich Rendern, input-tag selbst (fügen Sie einige JavaScript-code und ein Fehler-Klasse im Falle eines Fehlers). Zum Beispiel ist meine Vorlage statt {{ form.email }}
:
<input type="text" autocomplete="on" id="id_email" name="email"
class="email {% if form.email.errors %} error {% endif %}">
Allerdings nicht die Anzeige der falsche Wert ([email protected]
in diesem Beispiel) an den Benutzer.
Wie bekomme ich das Feld Wert in das template ein?
Du musst angemeldet sein, um einen Kommentar abzugeben.
War dieses eine feature-Anfrage, die wurden behoben in Django 1.3.
Hier ist der Fehler: https://code.djangoproject.com/ticket/10427
Grundsätzlich, wenn Sie läuft etwas nach 1.3, die in Django-templates, die Sie tun können:
Oder Jinja2:
Beachten Sie, dass
field.value()
ist eine Methode, aber in Django-templates()
's sind weggelassen, während in Jinja2 Methodenaufrufe explizit.Wenn Sie wissen möchten, welche version von Django du läufst, wird es Ihnen sagen, wenn Sie die runserver-Befehl.
Wenn Sie auf etwas vor 1.3, können Sie wahrscheinlich mit dem fix gepostet, in dem oben genannten bug: https://code.djangoproject.com/ticket/10427#comment:24
form.field.value
istNone
, dann den text "None" wird angezeigt. Zur Anzeige einer leeren Zeichenfolge verwenden Sie stattdessen{{ form.field.value|default_if_none:"" }}
{{ form.initial.fieldname }}
hier (Django 1.2.3).{{ form.field.value|default_if_none:"" }}
, wie kann ich den Durchlauf einer for-Schleife Objekt in dervalue
Teil ? Jemand hat eine Frage einfach mal zu Fragen! linkKönnen Sie dies aus der Vorlage mit so etwas wie dies:
Dadurch wird die Instanz mit dem Wert (wenn die form erstellt wird, ist mit einer Instanz, die Sie verwenden können, erste stattdessen wenn Sie möchten), oder andere anzeigen, die POST-Daten, wie, wenn ein überprüfungsfehler Auftritt.
Diese scheint zu funktionieren.
Habe ich eine einfache Lösung für Sie!
Ich versuchte dies und es funktionierte. Dies erfordert Ihrer Ansicht zum füllen der form-Klasse mit dem POST-Daten.
Sehr einfaches Beispiel:
Hoffe das hilft dir. Wenn Sie Fragen haben, bitte lassen Sie es mich wissen.
{{ form.data }}
gibt ein dict. Aus, die wir verarbeiten die Daten von der server-Seite. Ich war auf der Suche nach diesem einen bestimmten Grund. Jetzt kann ich den Wert ändern von server-Seite, wieform.data[stringvaluecorrespondingtofield] = newstringvalue
.Dem Vorschlag von Jens ist richtig.
Es stellt sich jedoch heraus, dass, wenn Sie initialisieren Sie Ihre ModelForm mit einem Instanz (Beispiel unten), django wird nicht füllen Sie die Daten:
So, ich habe meine eigenen ModelForm Basisklasse, füllt die ersten Daten:
Dann, dem simple-view-Beispiel sieht wie folgt aus:
{{form.field_name.Wert}} funktioniert bei mir
Wollte ich den Wert anzuzeigen, der einen Formularsatz Feld. Ich Schloss diese Lösung, die funktionieren sollte für den normalen Formen zu:
Den oben genannten Lösungen, die nicht funktionierte sehr gut für mich, und ich bezweifle, Sie würden im Falle des Präfix-Formen (wie Assistenten und formsets).
Die Lösungen mit
{{ form.data.email }}
kann nicht funktionieren, denn es ist ein Wörterbuch-lookup, und mit dem Präfix bildet den Feldnamen Aussehen würde, so etwas wie '1-E' (- Assistenten und Präfix-form) oder "form-1-E' (Formularsatz) und das minus-Zeichen (-) sind nicht erlaubt im gepunkteten template-lookup-Ausdrücke.{{form.field_name.value}}
ist Django 1.3+ nur.Habe ich versucht, ein paar der genannten Möglichkeiten, und das ist, wie ich mein problem gelöst:
Ich versuche zu erklären, dies in einer Weise, so dass Anfänger finden es vielleicht leichter zu verstehen. Achten Sie genau auf die
else:
Es ist das, was den Wert attrib, z.B.:
Wenn Sie schon aufgefüllt, die form mit einer Instanz und nicht mit POST-Daten (wie die vorgeschlagene Antwort erfordert), können Sie Zugriff auf die Daten mit {{ form.Instanz.my_field_name }}.
Auf Django 1.2, {{ form.Daten.field }} und {{ form.Feld.Daten }} sind alle OK, aber nicht {{ form.Feld.Wert }}.
Wie andere sagten: {{form.Feld.Wert }} ist Django 1.3+ nur, aber es gibt keine Spezifikation, die in https://docs.djangoproject.com/en/1.3/topics/forms/. Es kann in https://docs.djangoproject.com/en/1.4/topics/forms/.