Ich konnte das nicht in den Dokumenten finden, aber denke, dass es möglich sein muss. Ich spreche speziell von dem ClearableFileInput-Widget. 1.2.6 aus einem Projekt in django Ich habe dieses Formular:Wie kann ich die HTML-Ausgabe eines Widgets in Django anpassen?
# the profile picture upload form
class ProfileImageUploadForm(forms.ModelForm):
"""
simple form for uploading an image. only a filefield is provided
"""
delete = forms.BooleanField(required=False,widget=forms.CheckboxInput())
def save(self):
# some stuff here to check if "delete" is checked
# and then delete the file
# 8 lines
def is_valid(self):
# some more stuff here to make the form valid
# allthough the file input field is empty
# another 8 lines
class Meta:
model = SocialUserProfile
fields = ('image',)
, die ich dann dieses Template-Code gerendert:
<form action="/profile/edit/" method="post" enctype="multipart/form-data">
Delete your image:
<label> {{ upload_form.delete }} Ok, delete </label>
<button name="delete_image" type="submit" value="Save">Delete Image</button>
Or upload a new image:
{{ upload_form.image }}
<button name="upload_image" type="submit" value="Save">Start Upload</button>
{% csrf_token %}
</form>
Wie Django 1.3.1 verwendet nun ClearableFileInput als Standard-Widget, i ist ziemlich sicher, dass ich die 16 Zeilen meines form.save überspringen und wie so die Form Code verkürzen:
# the profile picture upload form
class ProfileImageUploadForm(forms.ModelForm):
"""
simple form for uploading an image. only a filefield is provided
"""
class Meta:
model = SocialUserProfile
fields = ('image',)
das ist mir das gute Gefühl geben würde, dass ich weniger maßgeschneiderte formcode habe und kann auf th verlassen e Django Builtins.
Ich würde natürlich gerne die HTML-Ausgabe wie zuvor beibehalten. Wenn Sie nur den vorhandenen Vorlagencode verwenden, erscheinen solche Dinge wie "Currently: somefilename.png" an Orten, an denen ich sie nicht haben möchte.
Die Aufteilung des Formularfelds weiter, wie {{ upload_form.image.file }}
scheint nicht zu funktionieren. Das nächste, was mir in den Sinn kam, war ein benutzerdefiniertes Widget zu schreiben. Das würde genau gegen meine Bemühungen arbeiten, so viel benutzerdefinierten Code wie möglich zu entfernen.
Irgendwelche Ideen, was wäre die einfachste Sache in diesem Szenario zu tun?
kurze Antwort: Schritt 1: Verlängerung der Widget-Klasse SCHRITT 2: Widget für Ihr Feld Hinweis außer Kraft gesetzt: Sie wollen Verwenden Sie das untergeordnete Widget, das Sie in Schritt 1 in der Methode "__init__" der Django-Form erstellt haben. Wenn Sie Beispiele brauchen, lassen Sie es mich wissen und ich werde es heute Nachmittag treffen. –
Das letzte, worüber ich nachgedacht habe, ist, einfach die vom Widget verwendete Vorlage zu überschreiben. Ich würde mich freuen, wenn du heute nachmittag reinkommst (du bist offensichtlich auf einem anderen Kontinent als ich, denn hier ist es schon 16:15 Uhr: D) – marue
ja, wenn ich von der Arbeit steige, erschieße ich dir ein Beispiel. ~ 5 oder so Stunden –