Django ImageField - отображать только элемент <input> - PullRequest
0 голосов
/ 24 июня 2018

У меня есть форма Django, в которой есть ImageField, и я отображаю поле следующим образом в моем шаблоне:

{{ form.my_image_field }}

Полученный HTML-код выглядит следующим образом:

Currently: <a href="https://....s3.amazonaws.com/....jpg">....jpg</a>
<input name="my_image_field-clear" id="my_image_field-clear_id" type="checkbox">
<label for="my_image_field-clear_id">Clear</label><br>
Change:
<input name="my_image_field" id="id_my_image_field" type="file">

Я хочу отобразить только элемент <input, так как я использую библиотеку bootstra-fileinput: https://www.npmjs.com/package/bootstrap-fileinput:

<input name="my_image_field" id="id_my_image_field" type="file">

Возможно ли это сделать без записи тега <input> вручную в шаблоне?

1 Ответ

0 голосов
/ 24 июня 2018

Обычно ImageField s использует виджет ClearableFileInput.Этот виджет по умолчанию использует имя шаблона django/forms/widgets/clearable_file_input.html.

. Вы можете создать собственный подкласс виджета ClearableFileInput, который использует другой шаблон.

from django.forms.widgets import ClearableFileInput

class MyImageWidget(ClearableFileInput):
    template_name = "myapp/my_template.html"

содержимое этого шаблона может быть просто частью <input> шаблона по умолчанию со снятой лишней меткой и флажком.Вы можете настроить его так, как вам нужно.Это может выглядеть как

<!-- myapp/my_template.html -->
<input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>

Затем в вашей форме укажите виджет для ImageField

class MyForm(forms.Form):
    #  ...
    my_image_field = forms.ImageField(widget=MyImageWidget)
    #  ...

Django также предоставляет виджет FileInput, который использует простой шаблон .Если это соответствует вашим потребностям, просто сделайте

class MyForm(forms.Form):
    #  ...
    my_image_field = forms.ImageField(widget=forms.widgets.FileInput)

В качестве альтернативы, вы можете просто переопределить шаблон по умолчанию, создав файл django/forms/widgets/clearable_file_input.html в каталоге template вашего проекта.Однако это применило бы это изменение к визуализации всех полей с использованием виджета ClearableFileInput, так что это не такой гибкий подход.

...