Django ImageField - 仅渲染元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django ImageField - 仅渲染元素相关的知识,希望对你有一定的参考价值。

我有一个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">

我想只渲染qazxsw poi元素,因为我使用的是bootstrap-fileinput库:qazxsw poi:

<input

如果不在模板中手动编写https://www.npmjs.com/package/bootstrap-fileinput标签,是否可以这样做?

答案

通常,<input>s使用小部件。默认情况下,此小组件使用模板名称ImageField

您可以创建自己的ClearableFileInput小部件子类,它使用不同的模板。

django/forms/widgets/clearable_file_input.html.

该模板的内容可能只是默认模板的ClearableFileInput部分,其中删除了无关的标签和复选框。您可以根据需要自定义它。这可能看起来像

from django.forms.widgets import ClearableFileInput

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

然后在表单中指定ImageField的小部件

<input>

Django还提供了一个使用<!-- myapp/my_template.html --> <input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}> class MyForm(forms.Form): # ... my_image_field = forms.ImageField(widget=MyImageWidget) # ... 小部件。如果这符合您的需求,那就干脆做

FileInput

或者,您可以通过在项目的plain template目录中创建class MyForm(forms.Form): # ... my_image_field = forms.ImageField(widget=forms.widgets.FileInput) 文件来覆盖默认模板。但是,这会使用django/forms/widgets/clearable_file_input.html小部件将更改应用于所有字段的呈现,因此它不像方法那样灵活。

以上是关于Django ImageField - 仅渲染元素的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中仅渲染 MultiWidget 的一部分

在 Django 中仅渲染 MultiWidget 的一部分

django -- ImageField 上传图片修改头像

Django - 如何将 InMemoryUploadedFile 转换为 ImageField 的 FieldFile?

Django - 手动将图像保存到 ImageField 字段

Django - ImageField 文件没有显示?