Bunu dokümanlarda bulamadım, ancak bunun mümkün olduğunu düşünün. Ben özellikle ClearableFileInput widget'ından bahsediyorum. django 1.2.6 bir proje itibaren ben bu form var: i sonra bu şablon kodu kullanarak renderDjango'da bir widget'ın html çıktısını nasıl özelleştirebilirim?
# 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',)
:
<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>
Django 1.3.1 artık varsayılan widget olarak ClearableFileInput kullandığı gibi, ben 'benim form.save 16 satırları atlamak ve sadece bu yüzden gibi formu kodunu kısaltabilir eminim: bana i az özelleştirilmiş formcode sahip iyi bir his verecek ve inci güvenebilirsiniz
# 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',)
e Django yerleşikleri.
Elbette html çıktısını eskisi gibi tutmak isterim. Sadece mevcut şablon kodunu kullandığınızda, "Şu anda: somefilename.png" gibi şeyler, onları istemediğim yerlerde açılır. FormField ayrıca, {{ upload_form.image.file }}
gibi
Bölme çalışmak görünmüyor. Aklıma gelen bir sonraki şey özel bir widget yazmaktı. Tam olarak, olabildiğince çok sayıda özelleştirilmiş kodu kaldırma çabalarına tam olarak uyan.
Bu senaryoda yapılacak en basit şey ne olabilir?
Kısa cevap: ADIM 1: Widget sınıfı ADIM 2 uzatmak: saha Not Widget geçersiz: İstediğiniz django formunun '__init__' yönteminde 1. adımda oluşturduğunuz alt sınıf widget'ını kullanmak için. Örneklere ihtiyacınız varsa, bana haber verin ve bu öğleden sonra vururum. –
En son düşündüğüm, widget tarafından kullanılan şablonun geçersiz kılınmasıydı. Bu öğleden sonra ayarlayacağınız için minnettarım (tabii ki benden farklı bir kıtadasınız, işte burada olduğu gibi 16:15: D) – marue
Evet, işten çıktığımda, size bir örnek vereceğim. ~ 5 saat kadar –