Ausgabe
Ich iteriere durch die Felder eines Formulars und möchte für bestimmte Felder ein etwas anderes Layout, das geändertes HTML erfordert.
Um dies genau zu tun, muss ich nur den Widget-Typ kennen. Sein Klassenname oder etwas Ähnliches. In Standard-Python ist das einfach!field.field.widget.__class__.__name__
Leider haben Sie keinen Zugriff auf Unterstrich-Variablen in Vorlagen. Groß!
Sie können testen field.field.widget.input_type
, aber dies funktioniert nur für Text-/Passworttypen <input ../>
. Ich brauche mehr Auflösung als das.
Für mich ist es, so schwierig es auch aussehen mag, am sinnvollsten, dies auf Vorlagenebene zu tun. Ich habe den Code, der HTML für Felder verarbeitet, in eine separate Vorlage ausgelagert, die in die Feldschleife eingefügt wird. Dies bedeutet, dass es über ModelForm
s und Standard- Form
s hinweg konsistent ist (etwas, das nicht wahr wäre, wenn ich eine zwischengeschaltete Form-Klasse schreiben würde).
Wenn Sie einen universellen Ansatz sehen, bei dem ich nicht etwa 20 Formulare bearbeiten muss, lassen Sie es mich auch wissen!
Lösung
Ab Django 1.11 können Sie einfach widget.input_type
. Beispiel:
{% for field in form.visible_fields %}
<input type="{{ field.field.widget.input_type }}"
id="{{ field.id_for_label }}"
name="{{ field.html_name }}"
placeholder="{{ field.label }}"
maxlength="{{ field.field.max_length }}" />
{% endfor %}
Beantwortet von – Ivan Ogai
Antwort geprüft von – Mildred Charles (FixError Admin)