88 Stimmen

Wie kann ich den Wert eines Django-Formularfeldes in einer Vorlage anzeigen?

Ich habe ein Formular mit einer E-Mail-Eigenschaft.

Bei der Verwendung von {{ form.email }} Im Falle eines Validierungsfehlers rendert Django immer noch den vorherigen Wert im value-Attribut des input-Tags:

<input type="text" id="id_email" maxlength="75" class="required"
       value="some@email.com" name="email">

Ich möchte das Eingabe-Tag selbst rendern (um etwas JavaScript-Code und eine Fehlerklasse für den Fall eines Fehlers hinzuzufügen). Zum Beispiel ist dies meine Vorlage anstelle von {{ form.email }} :

<input type="text" autocomplete="on" id="id_email" name="email"
       class="email {% if form.email.errors %} error {% endif %}">

Allerdings wird der fehlerhafte Wert nicht angezeigt ( some@email.com in diesem Beispiel) an den Benutzer.

Wie erhalte ich den Wert des Feldes in der Vorlage?

150voto

mlissner Punkte 15941

Dies war ein Funktionswunsch, der in Django 1.3 behoben wurde.

Hier ist der Fehler: https://code.djangoproject.com/ticket/10427

Grundsätzlich, wenn Sie etwas nach 1.3 laufen, in Django Vorlagen können Sie tun:

{{ form.field.value|default_if_none:"" }}

Oder in Jinja2:

{{ form.field.value()|default("") }}

Beachten Sie, dass field.value() ist eine Methode, aber in Django-Vorlagen () werden weggelassen, während in Jinja2 Methodenaufrufe explizit sind.

Wenn Sie wissen wollen, welche Version von Django Sie verwenden, können Sie dies mit dem Befehl runserver herausfinden.

Wenn Sie mit einer Version vor 1.3 arbeiten, können Sie wahrscheinlich die im obigen Fehler beschriebene Lösung verwenden: https://code.djangoproject.com/ticket/10427#comment:24

52voto

LeeMobile Punkte 3605

Sie können dies von der Vorlage aus mit etwas wie diesem tun:

{% if form.instance.some_field %}
      {{form.instance.some_field}}
{% else %}
      {{form.data.some_field}}
{% endif %}

Dies zeigt den Instanzwert an (wenn das Formular mit einer Instanz erstellt wurde, können Sie stattdessen initial verwenden, wenn Sie möchten), oder zeigt die POST-Daten an, z. B. wenn ein Validierungsfehler auftritt.

20voto

Jens Punkte 18659

Ich habe eine einfache Lösung für Sie!

{{ form.data.email }}

Ich habe das ausprobiert und es hat funktioniert. Dies erfordert Ihre Ansicht, um die Formularklasse mit den POST-Daten zu füllen.

Ein sehr einfaches Beispiel:

def your_view(request):
  if request.method == 'POST':
    form = YourForm(request.POST)
    if form.is_valid():
      # some code here
  else:
    form = YourForm()

  return render_to_response('template.html', {'form':form})

Ich hoffe, das hilft Ihnen. Wenn Sie noch Fragen haben, lassen Sie es mich bitte wissen.

19voto

Rich Punkte 7008

Das scheint zu funktionieren.

{{ form.fields.email.initial }}

14voto

robertzp Punkte 1219

{{ form.field_name.value }} funktioniert bei mir

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X