Как я могу настроить вывод html виджета в Django?

Я не смог найти это в документах, но думаю, что это должно быть возможно. Я говорю конкретно о виджете ClearableFileInput. Из проекта в django 1.2.6 у меня есть эта форма :

# 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 теперь использует ClearableFileInput в качестве виджета по умолчанию, я почти уверен, что могу пропустить 16 строк моего form.save и просто сократите код формы вот так:

# 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',)

Это дало бы мне хорошее ощущение, что у меня менее настраиваемый код формы, и я могу полагаться на встроенные функции Django.

Я бы, конечно, хотел, чтобы вывод html -оставался таким же, как и раньше. Когда вы просто используете существующий код шаблона, такие вещи, как «В настоящее время :somefilename.png», появляются в местах, где они мне не нужны.

Дальнейшее разбиение поля формы, как {{ upload_form.image.file }}, похоже, не работает. Следующим, что пришло мне в голову, было написать собственный виджет. Что будет работать точно против моих усилий по удалению как можно большего количества пользовательского кода.

Есть идеи, что было бы проще всего сделать в этом сценарии?

11
задан marue 5 April 2012 в 12:48
поделиться