Django ImageField - 仅呈现 <input> 元素
Django ImageField - render only the <input> element
我有一个 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>
标记来执行此操作?
通常,ImageField
s 使用 ClearableFileInput
widget. This widget by default uses the template name 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
widget which uses a plain template。如果这适合您的需要,只需执行
class MyForm(forms.Form):
# ...
my_image_field = forms.ImageField(widget=forms.widgets.FileInput)
或者,您可以通过在项目的 template
目录中创建 django/forms/widgets/clearable_file_input.html
文件来简单地覆盖默认模板。但是,这会将更改应用到使用 ClearableFileInput
小部件的所有字段的呈现,因此它不是一种灵活的方法。
我有一个 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>
标记来执行此操作?
通常,ImageField
s 使用 ClearableFileInput
widget. This widget by default uses the template name 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
widget which uses a plain template。如果这适合您的需要,只需执行
class MyForm(forms.Form):
# ...
my_image_field = forms.ImageField(widget=forms.widgets.FileInput)
或者,您可以通过在项目的 template
目录中创建 django/forms/widgets/clearable_file_input.html
文件来简单地覆盖默认模板。但是,这会将更改应用到使用 ClearableFileInput
小部件的所有字段的呈现,因此它不是一种灵活的方法。